Java 停止线程的各种方法-哪种方法正确

Java 停止线程的各种方法-哪种方法正确,java,multithreading,Java,Multithreading,我遇到了不同的停止线程的建议。我可以知道,哪一条路正确吗?还是视情况而定 使用线程变量 private volatile boolean flag; public void stop() { flag = false; } public void run() { while (flag) { try { thisThread.sleep(interval); } catch (InterruptedException e

我遇到了不同的停止线程的建议。我可以知道,哪一条路正确吗?还是视情况而定

使用线程变量

private volatile boolean flag;

public void stop() {
    flag = false;
}

public void run() {
    while (flag) {
        try {
            thisThread.sleep(interval);
        } catch (InterruptedException e){
        }
        repaint();
    }
}

使用布尔标志

private volatile boolean flag;

public void stop() {
    flag = false;
}

public void run() {
    while (flag) {
        try {
            thisThread.sleep(interval);
        } catch (InterruptedException e){
        }
        repaint();
    }
}

将线程变量与中断一起使用

private volatile Thread blinker;

public void stop() {
    blinker.interrupt();
    blinker = null;
}

public void run() {
    Thread thisThread = Thread.currentThread();
    while (!thisThread.isInterrupted() && blinker == thisThread) {
        try {
            thisThread.sleep(interval);
        } catch (InterruptedException e){
        }
        repaint();
    }
}
这些都不是“正确”的方法,它们都是有效的。你使用哪一种取决于你的环境,哪一种最适合你


只要您不使用
Thread.stop()
,并且整理线程打开的任何资源(连接、临时文件等),那么如何处理就无关紧要了。

我总是使用布尔标志-这是最简单的。 它对于评论者来说确实很短,也很容易理解,但是它有一个方便的图标,你不能打断睡眠通话。您应该仅将中断变量用于时间关键型线程停止。而且,正如斯卡夫曼所说,不要使用
Thread.stop()


这个怎么样

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

为什么不使用java并发程序包呢?当我自己研究这个问题时,我发现这个参考资料解释了
Thread.stop()
和两个可能的替代实现的问题。似乎无论您使用何种语言,使用相当于
Thread.stop()
的方法总是一个糟糕的主意: