0

而不是在循环内连续检查变量:

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

3 回答 3

1

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

我想底线是您必须在线程内部不断轮询才能执行优雅的中断。

于 2013-04-03T18:07:35.843 回答
1

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

于 2013-04-03T18:16:26.913 回答
0

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

此处已经提出了类似的问题,您也可以在此处找到代码示例。

于 2013-04-03T18:16:19.833 回答