标签:
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关键字声明一个变量的时候,等于告诉虚拟机,这个变量极有可能被某些程序或者线程修改。为了确保这个变量被修改后,应用程序范围内的所有线程都能够看到这个改动,虚拟机就必须采用一些特殊的手段,保证这个变量的可见性等他点,但是并不能替代锁,也无法保证一些复合操作的原子性。
标签:
原文地址:http://www.cnblogs.com/yueyanglou/p/5182301.html