Java Thread.stop() vs Thread.interrupt()

2022-09-02 09:03:25

我有以下代码:

renderThread = new Thread(new Runnable() {

    @Override
    public void run() {
        for (int i = 0; i < 10000000; i++) {
            System.out.println("Number: " + i);
        }
    }
});

renderThread.start();

try {
    Thread.sleep(100);
} catch (InterruptedException ex) {
    ex.printStackTrace();
}

renderThread.interrupt(); //It should stop, but it does not stop.

renderThread.interrupt()不会中断线程,它会继续运行。如果我用 替换,则线程停止。但是,已弃用。那么,如果线程已弃用且不起作用,则停止线程的正确方法是什么?renderThread.interrupt().stop().stop()stopinterrupt


答案 1

当你调用disrupt()时,它会触发一个布尔标志,告诉运行函数它应该停止。这就是为什么我通常这样编写运行函数的原因。

void run()
{
    while(!Thread.interrupted())
    {
        //Do something
    }
}

仅仅因为您调用了中断并不意味着线程将立即或根本停止。这取决于运行函数中的内容。


答案 2

要真正推动你不应该使用的观点?Thread.stop()

Doug Lea最近提到,Thread.stop将是Java 8中Java的第一个去实现方法

他对某人的这条评论的回应:

此外,同步的另一件事是它处理线程的异步中止(即thread.stop())。我知道stop()被弃用了,但你永远不会知道。

是:

但你确实知道!从JDK8开始,Thread.stop真的消失了。它是第一个实际已取消实现的已弃用方法。它现在只是抛出不受支持的操作异常。

http://cs.oswego.edu/pipermail/concurrency-interest/2013-December/012028.html