安全的终止线程
2020-09-23 本文已影响0人
tingshuo123
安全的终止线程
如果想终止线程最好不要使用 stop
方法,因为 stop
方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下。
终止线程最好使用线程中断标识 isInterrupt
或者自定义一个 boolean
变量来控制是否需要停止任务并终止该线程。
Shutdown.java
import java.util.concurrent.TimeUnit;
/**
* 使用标识安全的终止线程
*/
public class Shutdown {
public static void main(String[] args) throws InterruptedException {
Runner one = new Runner();
Thread countThread = new Thread(one, "CountThread");
countThread.start();
TimeUnit.SECONDS.sleep(1);
countThread.interrupt();
Runner two = new Runner();
countThread = new Thread(two, "CountThread");
countThread.start();
TimeUnit.SECONDS.sleep(1);
two.cancel();
}
private static class Runner implements Runnable {
private long i;
private volatile boolean on = true;
/**
* 通过线程中断标志位或则一个 boolean 变量来取消或者停止任务
*/
@Override
public void run() {
while (on && !Thread.currentThread().isInterrupted()) {
i++;
}
// 清理资源
System.out.println("Count = " + i);
}
public void cancel() {
on = false;
}
}
}