我有一个线程休眠一段时间并连续进行一些工作。
public void run() {
while(true) {
try {
Thread.sleep(SOME_RANDOM_TIME);
} catch (InterruptedException e) {
return;
}
doSomeLabour();
}
}
我有一堆在Executors
上运行的线程。当我在执行程序上调用shutdownNow
时,线程有时不会终止。 shutdownNow
所做的只是在所有正在运行的线程上调用interrupt
,并且不接受任何新线程。
所以,基本上,我只是中断所有线程。
我知道当线程中断时,如果线程不处于睡眠状态,那么按照我的代码,什么也不会发生。但是,当线程在完成工作之后尝试进入睡眠状态时,由于该线程上仍设置了中断标志,因此睡眠下次应该抛出InterruptedException吗?
怎么样
while(!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(SOME_RANDOM_TIME);
} catch (InterruptedException e) {
return;
}
doSomeLabour();
}
代替?