ThreadPool使用流程

ThreadPool使用流程_第1张图片

keepAliveTime只针对大于corePoolSize且小于maximumPoolSize的空闲线程,比如corePoolSize=10,maxPoolSize=20,当前有15个线程在跑着,过段时间有4个线程处于等待状态的时间超过了keepAliveTime指定的时间,则结束掉此4个线程

普通的线程有五个状态:新建,可运行,阻塞,等待,结束。
线程池中的线程只有两个状态:可运行,等待

shutdown,只是遍历池中所有处于等待状态的空闲worker,对他们执行interupter操作
shutdownNow,则遍历池中所有worker线程,执行interupter操作,并返回等待处理的任务列表。

也就是说,虽然执行了shutdown(或shutDownNow),并不一定能够停止运行过程中的线程,只能对他们中断,告知他们,你们的活可以停了,但是具体要不要停,则由线程本身的逻辑来控制,这样做的好处,我觉得是避免了代码逻辑的不完整性,避免破坏代码中可能存在的原子性逻辑。

你可能感兴趣的:(ThreadPool使用流程)