keepAliveTime只针对大于corePoolSize且小于maximumPoolSize的空闲线程,比如corePoolSize=10,maxPoolSize=20,当前有15个线程在跑着,过段时间有4个线程处于等待状态的时间超过了keepAliveTime指定的时间,则结束掉此4个线程
普通的线程有五个状态:新建,可运行,阻塞,等待,结束。
线程池中的线程只有两个状态:可运行,等待
shutdown,只是遍历池中所有处于等待状态的空闲worker,对他们执行interupter操作
shutdownNow,则遍历池中所有worker线程,执行interupter操作,并返回等待处理的任务列表。
也就是说,虽然执行了shutdown(或shutDownNow),并不一定能够停止运行过程中的线程,只能对他们中断,告知他们,你们的活可以停了,但是具体要不要停,则由线程本身的逻辑来控制,这样做的好处,我觉得是避免了代码逻辑的不完整性,避免破坏代码中可能存在的原子性逻辑。
时间: 2024-11-29 09:17:24