码迷,mamicode.com
首页 > 编程语言 > 详细

(转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()

时间:2017-09-13 15:20:41      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:时间   sync   同步阻塞   style   logs   height   size   线程   共享存储   

为解决访问控制问题,Java 引入阻塞机制。阻塞指的是暂停一个Java线程同步的执行以等待某个条件发生(如某资源就绪)。

 

sleep():允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时 间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新 测试,直到条件满足为止。

 

suspend()&resume():两个方法配套使用,suspend()使得线程进 入阻塞状态,并且不会自动恢复,必须其对应的resume() 被调用,才能使得线程重新进入可执行状态。典型 地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果 后,调用 resume() 使其恢复。

 

yield():yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该Java线程同步已执行了足够的时间从而转到另一个线程。

 

wait()&notify():两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的 一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时Java线程同步重新进入可执行状态,后者则必须对应 的 notify() 被调用。小提示:(1)使用时必须synchronized,否则立即抛异常。(2)wait()&notify()是对象的方法。

初看起来它们与 suspend() 和 resume() 方法对没有什么分别,但是事实上它们是截然不同的。区别的核心在于,前面叙述的所有方法,阻塞时都不会释放占用的锁(如果占用了的话),而这一对方法则会释放占用的锁

在synchronized代码被执行期间,线程可以调用对象的wait()方法,释放对象锁标志,进入等待状态,并且可以调用notify()或者notifyAll()方法通知正在等待的其他线程。notify()通知等待队列中的第一个线程,notifyAll()通知的是等待队列中的所有线程。

(转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()

标签:时间   sync   同步阻塞   style   logs   height   size   线程   共享存储   

原文地址:http://www.cnblogs.com/tiantianlang/p/7514628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!