而不是连续检查循环中的变量:
class Tester {
public static void main() {
Try t = new Try();
Thread.sleep(10); //wait for 10 milliseconds
t.interrupt(); // 'interrupt' i.e stop the thread
}
}
public class Try extends Thread {
public void interrupt() {
//perform all cleanup code here
this.stop();
/*stop() is unsafe .but if we peform all cleanup code above it should be okay ???. since thread is calling stop itself?? */
}
}
答案 0 :(得分:1)
为了以良好的方式执行中断,您应该轮询正在被中断的线程内的“interrupted()”方法。 请注意,调用interrupted()方法会重置中断标志(在调用interrupt()时设置)。
我想底线是你必须在线程内连续轮询才能执行优雅的中断。
答案 1 :(得分:1)
你永远不应该在一个Thread,句点上调用.stop()。这个线程执行自己的清理是不够的。由于调用.stop()会立即释放所有监视器,因此其他线程可能会看到处于不一致状态的共享数据,这可能导致几乎无法跟踪错误。
答案 2 :(得分:0)
使用Thread.interrupt()方法代替Thread.stop()。在中断的线程中,您可以捕获InterruptedException
并进行所需的任何清理。
类似的问题已经被问到here,您也可以在那里找到代码示例。