void mySubTask(){
try{sleep(delay)}
catch(InterruptedException e){Thread.currentThread.interrupt();}
}
这串代码是《java核心技术》中并发一节的。14.2中断线程,634页。
当线程处于阻塞状态时,对其发送一个中断信号,会导致抛出InterruptedException异常。那么以上代码,在捕捉了这个异常后为什么还要对其设置中断状态呢?换句话说,这里设置中断状态,意义何在呢?
void mySubTask(){
try{sleep(delay)}
catch(InterruptedException e){Thread.currentThread.interrupt();}
}
这串代码是《java核心技术》中并发一节的。14.2中断线程,634页。
当线程处于阻塞状态时,对其发送一个中断信号,会导致抛出InterruptedException异常。那么以上代码,在捕捉了这个异常后为什么还要对其设置中断状态呢?换句话说,这里设置中断状态,意义何在呢?
4 回答1.2k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答712 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读
抛出异常后会清除中断标记位,调用Thread.currentThread.interrupt()重新设置中断状态,让调用方知道是由于中断才结束线程的。
比如你上面的代码,sleep响应了中断,当线程在seep中的时候,如果这个时候有中断的请求,就会抛出InterruptedException异常,并且清除中断状态,所以我们有时候需要再置为中断状态(其实就是需要保持这个中断状态)。