Thread.stop()

直接终止线程,并且会立即释放这个线程所持有的锁。

Thread.interrupt()

并不会是线程立即退出,而是给线程发送一个通知,告知目标线程,有人希望你退出啦,至于目标线程接到通知后会如何处理,则完全由目标线程自行决定。

Thread.sleep()

使当前线程休眠若干时间,如果线程sleep时被中断,就会产生InterruptedException

wait()和notify()方法不属于Thread,而是Object

T1

T2

获取object监视器

 

Object.wait()

 

释放object监视器

 

 

获得object监视器

 

Object.notify()

等待object监视器

释放object监视器

重获object监视器

 

继续执行

 

Object.wait()和Thread.sleep()都可以让线程仍待若干时间,除了wait()可以被唤醒外,另一个主要区别就是wait()方法会释放目标对象的锁,而sleep()方法不会释放任何资源。

join()方法的本质是让调用线程wait()在当前线程对象实例上。

yield()会使当前线程让出CPU,但让出CPU后,还会进行CPU资源的争夺。

volatile关键字声明一个变量的时候,等于告诉虚拟机,这个变量极有可能被某些程序或者线程修改。为了确保这个变量被修改后,应用程序范围内的所有线程都能够看到这个改动,虚拟机就必须采用一些特殊的手段,保证这个变量的可见性等他点,但是并不能替代锁,也无法保证一些复合操作的原子性。

posted on 2016-02-04 20:36  岳阳楼  阅读(212)  评论(0编辑  收藏  举报