这是停止'的正确方法。优雅的线程?

时间:2013-04-03 18:02:04

标签: java multithreading

而不是连续检查循环中的变量:

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?? */
    }
}

3 个答案:

答案 0 :(得分:1)

为了以良好的方式执行中断,您应该轮询正在被中断的线程内的“interrupted()”方法。 请注意,调用interrupted()方法会重置中断标志(在调用interrupt()时设置)。

我想底线是你必须在线程内连续轮询才能执行优雅的中断。

答案 1 :(得分:1)

你永远不应该在一个Thread,句点上调用.stop()。这个线程执行自己的清理是不够的。由于调用.stop()会立即释放所有监视器,因此其他线程可能会看到处于不一致状态的共享数据,这可能导致几乎无法跟踪错误。

答案 2 :(得分:0)

使用Thread.interrupt()方法代替Thread.stop()。在中断的线程中,您可以捕获InterruptedException并进行所需的任何清理。

类似的问题已经被问到here,您也可以在那里找到代码示例。