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()
的方法总是一个糟糕的主意: