java线程知识点
java线程知识点
席道坤 发表于11个月前
java线程知识点
  • 发表于 11个月前
  • 阅读 23
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: java线程

一、thread  run和start区别

run:它是一个普通的成员方法,调用run方法的话,会在当前线程中执行run方法,而不会启动新线程。

start:会启动一个新线程,新线程会执行相应的run方法。

 

二、什么是多线程同步

在多线程情况下,同步可以控制对共享资源的访问,如果没有同步,当一个线程修改一个共享变量时,另一个线程使用该变量时也会受到影响。

 

三、实现多线程的几种方式

1.实现Runnable接口

2.继承Thread类

3. 实现Callable有返回结果的多线程

注:Callable与Runnable使用方法大同小异;Callable 使用call()方法,Runnable使用run()方法;

Callable  带返回结果,Runnable不带返回结果;call抛出受检查的异常( Exception  ),而Runnable没有

 

四、ThreadLocal

ThreadLocal是一个线程级别的局部变量 , ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本, 每个线程修改副本时不影响其它线程对象的副本 。

常用的使用可在DAO模式中见到,当DAO类作为一个单例类时,数据库链接(connection)被每一个线程独立的维护,互不影响。(基于线程的单例)

 

五、sleep()和wait()区别

sleep()是一个静态方法 , 这意味着只对当前线程有效 , 即便是执行t.sleep(),也是当前线程进入睡眠,而不是t线程。 wait是object的方法而不是thread, 调用object.wait()时,线程先要获取这个对象的对象锁, 把当前线程添加到等待队列中, 随后另一线程可以同步同一个对象锁来调用object.notify(),这样将唤醒原来等待中的线程,然后释放该锁。

 

六、在静态方法上使用同步会怎样

同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,因为多个线程可以同时访问不同实例同步实例方法。

 

七、 在一个对象上两个线程可以调用两个不同的同步实例方法吗

不可以, 因为一个对象已经同步了实例方法,线程就获取了对象的对象锁。

 

八、什么是死锁

死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁,而每个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。就JavaAPI而言,线程死锁可能发生在一下情况。

●当两个线程相互调用Thread.join()

●当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。

 

标签: java 线程
共有 人打赏支持
粉丝 11
博文 195
码字总数 162356
×
席道坤
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: