转载请注明出处:
查看 ThreadPoolExecutor 类中的 getTask 方法,这个方法可以保持核心线程在没有任务的时候也可以一直处于存活状态
核心在于 workQueue.poll 和 workQueue.take() 两个方法,且前面会判断 当前线程数,如果 当前线程数等于核心线程数时,就会调用 take 方法,让线程向队列获取任务的状态一直保持阻塞状态,通过这个方法就可以保证核心线程一直存活状态。
看下 take 与 poll 方法的区别:
take:会响应中断,会一直阻塞直到取得元素或当前线程中断。如果队列中没有数据,则线程wait释放CPU
poll:会响应中断,会阻塞,阻塞时间参照方法里参数 timeout,timeUnit,当阻塞时间到了还没取得元素会返回null
Original: https://www.cnblogs.com/zjdxr-up/p/16339310.html
Author: 香吧香
Title: 线程池如何保证核心线程一直存活
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613033/
转载文章受原作者版权保护。转载请注明原作者出处!