上篇博客介紹了線程池的創建的,本文重點介紹線程池應該如何關閉。
線程池停止的相關方法有: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
暴力關閉所有線程
