1、废弃的stop()方法
stop()方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下。
2、通过标识位或中断操作
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(); // 睡眠1秒,main线程对CountThread进行中断,使CountThread能够感知中断而结束 TimeUnit.SECONDS.sleep(1); countThread.interrupt(); Runner two = new Runner(); countThread = new Thread(two, "CountThread"); countThread.start(); //睡眠1秒,main线程对Runner two进行取消,使CountThread能够感知on为false而结束 TimeUnit.SECONDS.sleep(1); two.cancel(); } static class Runner implements Runnable{ private long i; private volatile boolean on = true; @Override public void run() { while (on && !Thread.currentThread().isInterrupted()){ i++; } System.out.println("Count i = " + i); } // 标识位置为false public void cancel(){ on = false; } } }