一个hashSet。所以,线程池底层的存储结构其实就是一个HashSet。
worker线程处理队列任务- 第一个红框:是否是第一次执行任务,或者从队列中可以获取到任务。
- 第二个红框:获取到任务后,执行任务开始前操作钩子。
- 第三个红框:执行任务。
- 第四个红框:执行任务后钩子。
这两个钩子(beforeExecute,afterExecute)允许我们自己继承线程池,做任务执行前后处理。
到这里,源代码分析到此为止。接下来做一下简单的总结。
总结所谓线程池本质是一个hashSet。多余的任务会放在阻塞队列中。
只有当阻塞队列满了后,才会触发非核心线程的创建。所以非核心线程只是临时过来打杂的。直到空闲了,然后自己关闭了。
线程池提供了两个钩子(beforeExecute,afterExecute)给我们,我们继承线程池,在执行任务前后做一些事情。
线程池原理关键技术:锁(lock,cas)、阻塞队列、hashSet(资源池)
最后希望对你理解线程池有帮助。最后,留一个思考题,为什么线程池的底层数据接口采用HashSet来实现?
,