停止线程池的正确方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了停止线程池的正确方法相关的知识,希望对你有一定的参考价值。
参考技术A 1、shutdown()代表关闭线程池队列入口,那么isShutdown()判断的就是线程池队列入口有没关闭。2、线程池队列入口关闭之后还继续往线程池添加任务则会抛出 RejectedExecutionException 异常。
停止:线程池队列入口关闭且线程池中任务都执行完毕
1、如果没有关闭线程池队列入口,那么线程池isTerminated永远为false,不管线程池中任务是否都执行完毕
1、既然是判断线程池是否停止,那么同第二个例子一样,在执行awaitTermination方法之前需要执行shutdown()方法。
1、shutdownNow()方法既关闭线程池队列入口,还”强迫“线程池中任务立刻完成(即中断)。
线程池的停止
上篇博客介绍了线程池的创建的,本文重点介绍线程池应该如何关闭。
线程池停止的相关方法有: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
线程池是否已经关闭
isTerminated
线程池所有任务任务是否已经关闭
awaitTermination
shutdownNow
以上是关于停止线程池的正确方法的主要内容,如果未能解决你的问题,请参考以下文章