有多少方法实现设置java线程熟睡一段时间并可随时被唤醒
有多少方法实现设置java线程沉睡一段时间并可随时被唤醒
有什么办法实现写两个同时开始的线程,线程A沉睡一小时,而线程B三秒后唤醒A。我知道的只有设置一个static flag和time标记,两线程通过标记确定A是否跳出while((xx.flag != 3)&&(thread.time!=3600)){ Thread.sleep(1000)}循环,有没有其他方法
------解决思路----------------------
提供两种常见的方法:
1.线程B持有线程A的Thread对象的引用(假设为ta),线程A调用Thread.sleep(3600*1000)休眠一小时,线程B在3秒后调用ta.interrupt(),线程A被唤醒并且sleep方法抛出一个InterruptedException。
2.线程A、B持有一个相同对象的引用(假设为ox),线程A使用这个代码,将在wait处阻塞一小时:
线程B在三秒后执行这段代码:
线程A被唤醒,且不抛出InterruptedException。
有什么办法实现写两个同时开始的线程,线程A沉睡一小时,而线程B三秒后唤醒A。我知道的只有设置一个static flag和time标记,两线程通过标记确定A是否跳出while((xx.flag != 3)&&(thread.time!=3600)){ Thread.sleep(1000)}循环,有没有其他方法
------解决思路----------------------
提供两种常见的方法:
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。