线程池
一切都是浮云丶
这个作者很懒,什么都没留下…
展开
-
线程池关闭流程
线程池的状态转换:关闭线程池的方法shutdown():把线程池状态修改为SHUTDOWN,并通过interruptIdleWorkers()中断所有空闲工作者线程。shutdownNow():把线程池状态修改为STOP,并通过interruptWorkers()中断所有工作者线程。 shutdownNow()会中断正在工作的工作者线程,也仅仅是中断目标线程,但目标线程不一定响应中断或者已处理中断异常,它并不是停止目标线程。线程池是如何判断工作者线程是空闲还是忙碌呢? 工作者线程W原创 2020-08-18 17:46:39 · 988 阅读 · 1 评论 -
线程池拒绝策略bug?
首先看一下任务提交的流程: 线程池的最大线程数为2,任务队列大小为1,理论上最多同时可提交3个任务,但实际却触发了拒绝策略。public static void main(String[] args) throws InterruptedException { ThreadPoolExecutor tp = new ThreadPoolExecutor(0, 2, 100, TimeUnit.DAYS, new LinkedBlockingDequ原创 2020-08-18 16:10:32 · 349 阅读 · 3 评论 -
线程池回收工作者线程原理
线程池是如何回收工作者线程的 首先线程池的工作者线程是不区分它是核心线程还是非核心线程的,那么线程池是如何回收掉非核心线程?又如何保证核心线程不会被回收?当然你也可以allowCoreThreadTimeOut(true)设置核心线程也过期。runWorker()源码解析工作者线程就是执行run()方法,然后内部调用runWorker()final void runWorker(Worker w) { Thread wt = Thread.currentThread();原创 2020-08-18 15:29:35 · 1040 阅读 · 0 评论