上篇介绍了线程池的创建的,本文重点介绍线程池应该如何关闭。
线程池停止的相关方法有: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
暴力关闭所有线程