“唯一可以忽略中断的情况是当你知道线程即将退出时。这种情况只会在调用可中断方法的类是
Thread
而不是Runnable
的情况下出现[…]”。
到目前为止,我总是为我的线程实现 Runnable
接口。像这样提供一个 Runnable
实现:
public class View() implements Runnable {
@Overload
public void run(){
Thread worker = new Thread(new Worker());
worker.start();
do{
try{
TimeUnit.SECONDS.sleep(3);
updateView();
}catch(InterruptedException e){
worker.interrupt();
// Thread.currentThread().interrupt();
return;
}
}while(true);
}
protected void updateView(){
// …
}
}
在我的return;
语句右边调用Thread.currentThread().interrupt();
确实必要吗?return;
本身不是已经执行了干净的退出了吗?为什么要这样做呢?文章中指出需要这样做是因为否则“[…] 在调用栈上方的代码将无法了解 […]”。相对于没有设置中断标志的线程,一个处于Thread.State.TERMINATED
状态且带有中断标志的线程在应用程序关闭时的好处是什么?你能给我一个例子,在这个例子中,Runnable
之外的代码检查了中断标志并有一个合理的原因吗?
顺便问一下,相对于实现Runnable
接口,扩展Thread
是否更好的代码设计呢?
Runnable
。 - OldCurmudgeon