上篇博客介紹了線程池的創建的,本文重點介紹線程池應該如何關閉。
線程池停止的相關方法有:shutdown、
shutdown
關閉線程池的方法之一,調用線程池的此方法后,不再接受新的任務,待所有任務都執行關閉后,進行關閉
實例代碼如下所示,不再接收新任務測試。
package threadPool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPoolTest { public static void main(String[] args) throws InterruptedException { ExecutorService executorService= Executors.newFixedThreadPool(4); for (int i=0;i<Integer.MAX_VALUE;i++){ executorService.execute(new FixTask()); } Thread.sleep(1500); executorService.execute(new FixTask()); } } class FixTask implements Runnable{ @Override public void run() { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } }
isShutdown
線程池是否已經關閉,當調用shutdown之后,此值為true
isTerminated
線程池所有任務任務是否已經關閉,包括正在執行和隊列中的任務都結束了
awaitTermination
相對比較弱,等待一段時間,阻塞一段時間,要是線程執行完了,為true,否則為false,可以進行線程池檢測
shutdownNow
暴力關閉所有線程