有多少方法实现设置java线程沉睡一段时间并可随时被唤醒

sudo5zzb 2015-09-24 11:20:44
有什么办法实现写两个同时开始的线程,线程A沉睡一小时,而线程B三秒后唤醒A。我知道的只有设置一个static flag和time标记,两线程通过标记确定A是否跳出while((xx.flag != 3)&&(thread.time!=3600)){ Thread.sleep(1000)}循环,有没有其他方法
...全文
540 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sudo5zzb 2015-09-26
  • 打赏
  • 举报
回复
引用 3 楼 mg2flyingff 的回复:
提供两种常见的方法: 1.线程B持有线程A的Thread对象的引用(假设为ta),线程A调用Thread.sleep(3600*1000)休眠一小时,线程B在3秒后调用ta.interrupt(),线程A被唤醒并且sleep方法抛出一个InterruptedException。 2.线程A、B持有一个相同对象的引用(假设为ox),线程A使用这个代码,将在wait处阻塞一小时:

synchronized(ox) {
	try {
		ox.wait(1000*3600);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
线程B在三秒后执行这段代码:

synchronized(ox) {
	ox.notify();
}
线程A被唤醒,且不抛出InterruptedException。
应该是这样
sudo5zzb 2015-09-26
  • 打赏
  • 举报
回复
好像是这样的
sudo5zzb 2015-09-26
  • 打赏
  • 举报
回复
引用 2 楼 tianyutaizi 的回复:
AB 同时开启,如果B3s后即唤醒A ,那么A休眠1小时也就无从谈起了 能说明白点吗
就是希望线程A如果没有其他线程唤醒的话就会一直暂停运行,如果1个小时之后依然没有线程唤醒的话A会结束暂停状态,继续执行下面代码。而B可以在这一个小时内随时唤醒A
网络咖啡 2015-09-25
  • 打赏
  • 举报
回复
没有别的办法
0萌萌哒0 2015-09-25
  • 打赏
  • 举报
回复
提供两种常见的方法: 1.线程B持有线程A的Thread对象的引用(假设为ta),线程A调用Thread.sleep(3600*1000)休眠一小时,线程B在3秒后调用ta.interrupt(),线程A被唤醒并且sleep方法抛出一个InterruptedException。 2.线程A、B持有一个相同对象的引用(假设为ox),线程A使用这个代码,将在wait处阻塞一小时:

synchronized(ox) {
	try {
		ox.wait(1000*3600);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
线程B在三秒后执行这段代码:

synchronized(ox) {
	ox.notify();
}
线程A被唤醒,且不抛出InterruptedException。
-天宇 2015-09-24
  • 打赏
  • 举报
回复
AB 同时开启,如果B3s后即唤醒A ,那么A休眠1小时也就无从谈起了 能说明白点吗
从小就很呆 2015-09-24
  • 打赏
  • 举报
回复
调用定时器3秒后唤醒A线程

62,614

社区成员

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

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