多线程问题请教:sleep中的线程可以被提前“唤醒”吗?

bangbong 2010-03-25 09:12:15
求教各位达人,假设有这样一个场景:

线程A在start之后去查询某个条件,发现条件不满足,于是sleep 10秒,意图是10秒之后再去查询一次这个条件,如果还不满足,则执行某种操作,否则执行另一种操作。
另外有一个线程B,它可能去操作某些数据,使线程A查询的条件由不满足变为满足。

我想问的是,如果A已经进入sleep了,但是还没到10秒,例如才只有2秒的时候,线程B修改了条件,使A的查询条件满足,那么能否通过某种方式让A立即醒过来而不必傻等10秒结束再醒?
notify方法能否让A提前醒过来?
...全文
1419 17 打赏 收藏 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹风的兔子 2011-12-07
  • 打赏
  • 举报
回复 1
我晕,C#里面 没有 notifyAll
吹风的兔子 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]

sleep(10*1000) 和 interrupt 配对使用
或wait(10*1000)与notifyAll配合使用
[/Quote]

以前只知道 Sleep ....学习了!
littlegang 2010-04-08
  • 打赏
  • 举报
回复
应该用wait,而不是sleep
xllee 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 brave_lxx 的回复:]
我觉得首先,lz所说场景就不适合用sleep。

既然是有条件不满足阻塞,那么自然用wait是最合适的。不断的sleep首先不好掌握,二是浪费资源。
如果用wait,那当然就要配合使用notify
[/Quote]
不建议用interrupt捕获
还是wait的好
Brave_lxx 2010-03-28
  • 打赏
  • 举报
回复
我觉得首先,lz所说场景就不适合用sleep。

既然是有条件不满足阻塞,那么自然用wait是最合适的。不断的sleep首先不好掌握,二是浪费资源。
如果用wait,那当然就要配合使用notify
哈特中尉 2010-03-27
  • 打赏
  • 举报
回复
wait()与notifyAll配合使用
axman 2010-03-27
  • 打赏
  • 举报
回复
在捕获中断异常后判断条件是否满足。
xlnheapy 2010-03-27
  • 打赏
  • 举报
回复
A{
run()
{
if(如果不符合条件){
B b= new B();
b.start();
b.jion();
}

}
}

amdgaming 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]

sleep(10*1000) 和 interrupt 配对使用
或wait(10*1000)与notifyAll配合使用
[/Quote]
支持。。。。
keeya0416 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]
[Quote=引用 5 楼 redduke1202 的回复:]
sleep(10*1000) 和 interrupt 配对使用
或wait(10*1000)与notifyAll配合使用
[/Quote]
[/Quote]
eimhee 2010-03-26
  • 打赏
  • 举报
回复
接参数sleep(20000) 自动唤醒
Ark032425 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]
sleep(10*1000) 和 interrupt 配对使用
或wait(10*1000)与notifyAll配合使用
[/Quote]
要用interrupt
「已注销」 2010-03-25
  • 打赏
  • 举报
回复
sleep(10*1000) 和 interrupt 配对使用
或wait(10*1000)与notifyAll配合使用
无伤 2010-03-25
  • 打赏
  • 举报
回复
应该不会, notify 是用来使那些wait()的线程得到激活的机会。
bangbong 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 islandrabbit 的回复:]
可以用interrupt
[/Quote]
中断?sleep的时候可以中断线程?看API上说的好像这样会抛出一个异常啊,而且即使可以,那么中断之后我怎么继续让A运行下去呢?
islandrabbit 2010-03-25
  • 打赏
  • 举报
回复
可以用interrupt
tyrwetu 2010-03-25
  • 打赏
  • 举报
回复
好像大概不行吧。不懂

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧