好吧,假设我有一个执行while()循环的Thread。在循环中,可以做一些事情,然后再回去睡觉:
public void run() {
while (some_condition) {
doSomeLongJob(); // this could be a long job
try {
Thread.sleep(a_bit); // back to sleep
} catch (InterruptedException ie) {
handleInterruptionButDoNotExitLoop();
}
}
}
有些问题:
答案 0 :(得分:1)
通过调用Thread.interrupted()
,您将获得该标志的状态,然后将其清除。
我的建议是:如果有疑问,请将此方法告知(对于以后必须维护代码的人),您希望吸收该条件并继续进行。
答案 1 :(得分:1)
也许,如果doSomeLongJob
有InterruptibleChannel
个IO对象,如果没有清除线程中断状态,下次你将尝试访问它们时会抛出ClosedByInterruptException
。< / p>
当Java核心类抛出InterruptedException
时,未设置线程中断状态
Thread.interrupted
将清除中断状态。如果您只需要中断测试,Thread.isInterrupted
将为您提供状态并保留中断状态。
答案 2 :(得分:1)
回答你的问题:
当您说中断时,您的意思是InterruptedException吗?如果是这样,我认为您应该在try中移动 doSomeLongJob 以处理可能的异常。
不会将其重置为false,您必须手动执行此操作。
要重置中断状态,请调用Thread.interrupted()。