社区
Java SE
帖子详情
请问调用notify后被选中线程的wait是立刻返回,还是等到调用notify的线程退出synchronized块后再返回?
natrium11
2002-10-04 08:56:58
我想应该是后者,但是因为要写书,还是确定一下。
唉,所有的例子都把notify作为最后一条语句,虽然应该如此,可是无法说明这一点。
多谢各位!!!
...全文
125
9
打赏
收藏
请问调用notify后被选中线程的wait是立刻返回,还是等到调用notify的线程退出synchronized块后再返回?
我想应该是后者,但是因为要写书,还是确定一下。 唉,所有的例子都把notify作为最后一条语句,虽然应该如此,可是无法说明这一点。 多谢各位!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Iforgot
2002-10-05
打赏
举报
回复
不是骂你,是实在看咱国人写的书很痛心。所以希望你能够写好书,也就是祝愿你写出好书!
natrium11
2002-10-05
打赏
举报
回复
多谢各位的答复,本人非常感激,加一些分吧,可是不好意思,本人最多只能给100(该死的csdn,我一想到这一点就有气!)。
to Iforgot(清风雨) :骂得好,骂得真好,不用给我面子,呵呵。
DanielYWoo
2002-10-05
打赏
举报
回复
to qqbz(qqbz)
人家写书耶!当然要深入写了
我认为是后者,大家如果从锁计数器的角度考虑,
就很清晰了
qqbz
2002-10-04
打赏
举报
回复
1、有关概念是这样的:
遇到notify(),运行系统立刻从等待池中任选一wait的线程进入寻找对象锁状态,
2、因此我认为在第一点中并不能说是立刻返回,应当是该线程重新找回对象锁继续执行该方法。
3、一般而言,在一个线程调用的synchronized方法中使用了wait后,需要另一个synchronized方法来notify()。
4、对于一般性的编程,似乎没必要钻研得那么深入,只要记住以上第一点。
zbc
2002-10-04
打赏
举报
回复
应该是后者,因为在synchronized语句块里面,任何时候只能有一个线程的,只有调用notify的线程退出后,线程才具有抢占cpu的机会
Iforgot
2002-10-04
打赏
举报
回复
个人觉得应该是后者,否则可能容易死锁!
我希望阁下写书时能够认真点,中国人自己写的书基本都一个字“差”。真的,简直就是误人子弟。但愿阁下能够是为数不多的不得“很差”之名的中国人。
实在看到很多人写书太不负责,所以或多或少对国人这种态度有些不太好感。如有冒犯之处还敬请原谅。
DanielYWoo
2002-10-04
打赏
举报
回复
后者吧
你想,notify之后,被激活的线程不能立即有锁呀,
必须出了synchronized语句块或方法,才能锁计数器减1
被激活的线程发现锁计数器为0时,才能对此对象操作
natrium11
2002-10-04
打赏
举报
回复
你的意思是?不大明白
daowang
2002-10-04
打赏
举报
回复
调用wait()后,将释放对象所有的属性,直到遇到notify(),故而未立即返回,这只是我的个人观点
java
线程
没
wait
前
调用
notify
,深入Java
线程
之
wait
和
notify
wait
和
notify
多
线程
是需要同步协作,比如QuartzSchedulerThread,作为Quartz的任务调度
线程
,如果设置该
线程
暂停,那么这个
线程
就必须
wait
, 等外界通知继续的时候,再执行任务。// check if we're supposed to pause...
synchronized
(sigLock) {while (paused && !halted.g...
为什么
wait
/
notify
必须与
synchronized
一起使用?
面试常常说使用
wait
、
notify
、
notify
All必须在同步代码
块
里也就是和
synchronized
一起用,为啥呢?在Java中,,即同一时刻只能有一个
线程
执行被
synchronized
关键字包裹的代码
块
或方法。这样可以。,直到其他
线程
调用
相同对象的
notify
()或
notify
All()方法来唤醒它。当一个
线程
调用
wait
()方法时,它,允许其他
线程
进入临界区并执行相关操作。。如果有多个
线程
等待,只能唤醒其中一个
线程
,具体唤醒哪个
线程
是不确定的。,让它们。
为什么
wait
和
notify
方法要在同步
块
中
调用
?
因此,为了确保
线程
在
调用
`
wait
()`、`
notify
()` 或 `
notify
All()` 方法时已经持有了对象的监视器锁,这些方法需要在使用 `
synchronized
` 同步
块
中
调用
。`
wait
()` 方法会释放当前
线程
持有的对象监视器锁,并使
线程
进入等待状态,直到其他
线程
调用
相同对象的 `
notify
()` 或 `
notify
All()` 方法来唤醒它。要
调用
对象的 `
wait
()`、`
notify
()` 或 `
notify
All()` 方法,
线程
必须先获得该对象的监视器锁。
Java中的
wait
和
notify
这个为什么要在
synchronized
代码
块
中?
参考链接:
wait
和
notify
1.
wait
和
notify
用来实现多
线程
之间的协调,
wait
表示让
线程
进入到阻塞状态,
notify
表示让阻塞的
线程
唤醒。 2.
wait
和
notify
必然是成对出现的,如果一个
线程
被
wait
()方法阻塞,那么必然需要另外一个
线程
通过
notify
()方法来唤醒这个被阻塞的
线程
,从而实现多
线程
之间的通信。 3.在多
线程
里面,要实现多个
线程
之间的通信,除了管道流以外,只能通过共享变量的方法来实现,也就是
线程
t1修改共享变量s,
线程
t2获取修改后的共享变量s,从而完成数据.
java
线程
方法
notify
,JAVA-
线程
wait
方法与
notify
方法详解
一、
notify
的含义(视为使当前
线程
获取对象锁并于规定一定条件下释放的方法)(1)
notify
一次只随机通知一个
线程
进行唤醒(
notify
All则为全部)(2) 在执行了
notify
方法之后,当前
线程
不会马上释放该对象锁,呈
wait
状态的
线程
也不能马上获得该对象锁,要等到执行
notify
方法的
线程
将程序执行完 ,也就是
退出
sychronized代码
块
后,当前
线程
才会释放锁,而呈
wait
状态所在...
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章