线程池的状态

柔情只为你懂 2022-01-22 01:57 340阅读 0赞

jdk1.5,sun公司邀请Doug Lea为jdk1.5设计了concurrent包,对java以及整个it行业都产生了深远影响。在此贴一张Doug老爷子的照片,以表敬仰
在这里插入图片描述
步入正题,最近正在看ThreadPoolExecutor的知识,看到线程状态的知识。感觉比较碎,在此记录一下。
不同的jdk版本,线程池状态定义不同。以jdk1.7为准,线程池有5种状态。
RUNNING:接收新任务,并且执行队列中的任务
SHUTDOWN:拒绝新任务,执行队列中的任务。当队列中的任务执行完即关闭线程池,此时状态变为TERMINATED
STOP:拒绝新任务,拒绝执行队列中的任务。同时打断正在执行的任务。当工作线程全 部停止,即关闭线程池。
TIDYING:当线程池所有的任务都停止,并且没有工作线程。此时就会过度到该状态,将会执行勾子函数terminated()
TERMINATED:执行完terminated()后的状态,就是TERMINATED。
如图:
在这里插入图片描述

接下来,我们做一个测试,测试shutdown方法执行之后,何时会关闭掉线程池?是不是符合我们上边说的结论
测试类如下:
在这里插入图片描述
在这里插入图片描述
测试结果,很清晰,当我们执行了shutdown方法之后,线程池依旧会执行队列中的任务。当我们的任务执行完之后,线程池关闭。isTerminated返回true。

接下来,我们测试一下执行了shutDownNow之后的情况,是不是不再执行队列中的任务。并且终止正在执行的任务
将显示调用shutdown方法的地方,改为shutdownNow。执行结果如下:
在这里插入图片描述
结果很清晰:
队列任务由1变为0,但是总任务由3变为2,说明队列任务被直接终止。而且,没有再接受新任务。

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线五种状态

    1、RUNNING 状态说明:线程池处于RUNNING状态时,能够接收新任务以及对已添加的任务进行处理。 状态切换:线程池的初始状态为RUNNING。换句话说线程池一旦被创

    相关 线有哪些状态

    1.RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。线程池的初始化状态是RUNNING。线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数