当前位置: 首页 > 后端技术 > Java

线程池状态

时间:2023-04-01 16:36:27 Java

RUNNING可以接收新任务和处理添加的任务。线程池一旦创建,就处于RUNNING状态。此时线程池中的任务数为0。SHUTDOWN不接收新任务,但可以处理添加的任务。调用线程池的shutdown()。接口,线程池处于RUNNING"SHUTDOWNSTOP"线程池处于STOP状态,不接收新任务,不处理新增任务,中断正在处理的任务调用线程池的shutdownNow()接口,线程poolisRUNNINGorSHUTDOWN"STOPTIDYING当所有任务终止时,ctl记录的任务数为0,线程池状态会变为TIDYING。当线程池状态变为TIDYING时,钩子函数终止()会被调用,这个方法在ThreadPoolExecutor中为空,如果用户想在线程池变为TIDYING时进行相应的处理,需要重载terminated()函数,当线程池状态为SHUTDOWN时,阻塞队列为空,线程池中执行的任务也为空,SHUTDOWN>TIDYING当线程池状态为STOP,线程池中执行的任务为空时,线程池被STOP“TIDYINGTERMINATED”彻底终止。线程池处于TIDYING状态。当terminated()被调用时,TIDYING的源码注释“TERMINATEDThreadPoolExecutor*runState提供了主要的生命周期控制,取值:**RUNNING:接受新任务并处理排队的任务*SHUTDOWN:不接受新任务,但是处理排队任务*STOP:不接受新任务,不处理排队任务,*并中断正在进行的任务*TIDYING:所有任务都已终止,workerCount为零,*线程tr调整状态TIDYING*将运行terminated()挂钩方法*TERMINATED:terminated()已完成**这些值之间的数字顺序很重要,以允许*有序比较。runState随*时间单调增加,但不需要达到每个状态。转换是:**RUNNING->SHUTDOWN*在调用shutdown()时,可能隐含在finalize()*(RUNNING或SHUTDOWN)->STOP*在调用shutdownNow()*SHUTDOWN->TIDYING*当队列和池为空*STOP->TIDYING*当池为空时*TIDYING->TERMINATED*当terminated()挂钩方法完成时**在awaitTermination()中等待的线程将在*状态达到TERMINATED时返回。