来至《java多线程设计模式》
两阶段终止,作业中--》终止处理中--》结束
不把处理一半的事情搁着,草率结束,等待其处理好后才真正的结束。
public class Main { public static void main(String[] args) { System.out.println("main: BEGIN"); try { CountupThread t = new CountupThread(); t.start(); Thread.sleep(10000); System.out.println("main: shutdownRequest"); System.out.println("main: join"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main: END"); } }
package Sample; public class CountupThread extends Thread { // 计数器的值 private long counter = 0; // 已经送出终止请求则为true private volatile boolean shutdownRequested = false; // 终止请求 // 判断终求请求是否已经送出 public boolean isShutdownRequested() { return shutdownRequested; } //动作 public final void run() { } // 作业 private void doWork() throws InterruptedException { counter++; System.out.println("doWork: counter = " + counter); Thread.sleep(500); } // 终止处理 }