感谢!写的很好,方便我理解了不少。
不过最后一句,虽然核心线程一直在自旋尝试获取任务,但它是从阻塞队列里take的,在BlockingQueue是空的情况下,take()操作是阻塞的;以ArrayBlockingQueue为例,他的take方法核心是while (count == 0) notEmpty.await(); 所以核心线程此时仍然是挂起的,并不会占用过多CPU~
如果有疏忽的话麻烦作者或者哪位大佬提醒下,感激不尽~
线程池执行原理及源码解析(execute、addWorker、runWorker、getTask、processWorkerExit 执行流程详解)这几天秋招面试的时候问到了线程池原理,因为线程池这块都是只了解API,当时没能很好的回答面试官提出的问题,花了整整一晚上结合别人的博客看了下源码,了解了线程池的大概执行流程,...