当前位置: 技术问答>java相关
请问调用notify后被选中线程的wait是立刻返回,还是等到调用notify的线程退出synchronized块后再返回?
来源: 互联网 发布时间:2015-09-23
本文导语: 我想应该是后者,但是因为要写书,还是确定一下。 唉,所有的例子都把notify作为最后一条语句,虽然应该如此,可是无法说明这一点。 多谢各位!!! | 1、有关概念是这样的: 遇到notify...
我想应该是后者,但是因为要写书,还是确定一下。
唉,所有的例子都把notify作为最后一条语句,虽然应该如此,可是无法说明这一点。
多谢各位!!!
唉,所有的例子都把notify作为最后一条语句,虽然应该如此,可是无法说明这一点。
多谢各位!!!
|
1、有关概念是这样的:
遇到notify(),运行系统立刻从等待池中任选一wait的线程进入寻找对象锁状态,
2、因此我认为在第一点中并不能说是立刻返回,应当是该线程重新找回对象锁继续执行该方法。
3、一般而言,在一个线程调用的synchronized方法中使用了wait后,需要另一个synchronized方法来notify()。
4、对于一般性的编程,似乎没必要钻研得那么深入,只要记住以上第一点。
遇到notify(),运行系统立刻从等待池中任选一wait的线程进入寻找对象锁状态,
2、因此我认为在第一点中并不能说是立刻返回,应当是该线程重新找回对象锁继续执行该方法。
3、一般而言,在一个线程调用的synchronized方法中使用了wait后,需要另一个synchronized方法来notify()。
4、对于一般性的编程,似乎没必要钻研得那么深入,只要记住以上第一点。
|
后者吧
你想,notify之后,被激活的线程不能立即有锁呀,
必须出了synchronized语句块或方法,才能锁计数器减1
被激活的线程发现锁计数器为0时,才能对此对象操作
你想,notify之后,被激活的线程不能立即有锁呀,
必须出了synchronized语句块或方法,才能锁计数器减1
被激活的线程发现锁计数器为0时,才能对此对象操作
|
个人觉得应该是后者,否则可能容易死锁!
我希望阁下写书时能够认真点,中国人自己写的书基本都一个字“差”。真的,简直就是误人子弟。但愿阁下能够是为数不多的不得“很差”之名的中国人。
实在看到很多人写书太不负责,所以或多或少对国人这种态度有些不太好感。如有冒犯之处还敬请原谅。
我希望阁下写书时能够认真点,中国人自己写的书基本都一个字“差”。真的,简直就是误人子弟。但愿阁下能够是为数不多的不得“很差”之名的中国人。
实在看到很多人写书太不负责,所以或多或少对国人这种态度有些不太好感。如有冒犯之处还敬请原谅。
|
应该是后者,因为在synchronized语句块里面,任何时候只能有一个线程的,只有调用notify的线程退出后,线程才具有抢占cpu的机会
|
调用wait()后,将释放对象所有的属性,直到遇到notify(),故而未立即返回,这只是我的个人观点