美丽鸵鸟

文章
5
资源
0
加入时间
3年0月21天

原理解析:线程池中多余的线程是如何回收的?

回收工作线程,一条线程getTask()返回null,就会被回收。分两种场景。1) 未调用shutdown() ,RUNNING状态下全部任务执行完成的场景线程数量大于,线程超时阻塞,超时唤醒后CAS减少工作线程数,如果CAS成功,返回null,线程回收。否则进入下一次循环。当工作者线程数量小于等于,就可以一直阻塞了。2) 调用shutdown() ,全部任务执行完成的场景shutdown()会向所有线程发出中断信号,这时有两种可能。2.1)所有线程都在阻塞。