线程池】 ThreadPoolExector的原理分析

2021-03-30 19:29发布

3条回答
studentaaa
2021-04-04 09:15

ThreadPoolExecutor的内部工作原理,整体思路总结为5句话:

  1. 如果线程池大小poolSize小于corePoolSize,则创建新线程执行任务。

  2. 如果线程池大小poolSize大于corePoolSize,且等待队列未满,则进入等待队列。

  3. 如果线程池大小poolSize大于corePoolSize且小于maximumPoolSize,且等待队列已满,则创建新线程执行任务。

  4. 如果线程池大小poolSize大于corePoolSize且大于maximumPoolSize,且等待队列已满,则调用拒绝策略来处理该任务。

  5. 线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行,如果在keepAliveTime里等不到新的任务了,那么线程就会退出。

ThreadPoolExecutor线程池中拒绝策略:

  1. AbortPolicy:为java线程池默认的阻塞策略,不执行此任务,而且会直接抛出一个执行时异常,切记TreadPoolExecutor.execute需要try catch,否则程序会直接退出。

  2. DiscardPolicy:直接抛弃,任务不执行,空方法

  3. DiscardOldestPolicy:从队列里面抛弃head的一个任务,并再次execute 此任务(task)

  4. CallerRunsPolicy:在调用execute的线程里面执行此command,会阻塞入口。

  5. 用户自定义拒绝策略:实现RejectdExecutionHandler,并自己定义策略模式。

一周热门 更多>