2021-03-30 19:29发布
ThreadPoolExecutor的内部工作原理,整体思路总结为5句话:
如果线程池大小poolSize小于corePoolSize,则创建新线程执行任务。
如果线程池大小poolSize大于corePoolSize,且等待队列未满,则进入等待队列。
如果线程池大小poolSize大于corePoolSize且小于maximumPoolSize,且等待队列已满,则创建新线程执行任务。
如果线程池大小poolSize大于corePoolSize且大于maximumPoolSize,且等待队列已满,则调用拒绝策略来处理该任务。
线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行,如果在keepAliveTime里等不到新的任务了,那么线程就会退出。
ThreadPoolExecutor线程池中拒绝策略:
AbortPolicy:为java线程池默认的阻塞策略,不执行此任务,而且会直接抛出一个执行时异常,切记TreadPoolExecutor.execute需要try catch,否则程序会直接退出。
DiscardPolicy:直接抛弃,任务不执行,空方法
DiscardOldestPolicy:从队列里面抛弃head的一个任务,并再次execute 此任务(task)
CallerRunsPolicy:在调用execute的线程里面执行此command,会阻塞入口。
用户自定义拒绝策略:实现RejectdExecutionHandler,并自己定义策略模式。
最多设置5个标签!
ThreadPoolExecutor的内部工作原理,整体思路总结为5句话:
如果线程池大小poolSize小于corePoolSize,则创建新线程执行任务。
如果线程池大小poolSize大于corePoolSize,且等待队列未满,则进入等待队列。
如果线程池大小poolSize大于corePoolSize且小于maximumPoolSize,且等待队列已满,则创建新线程执行任务。
如果线程池大小poolSize大于corePoolSize且大于maximumPoolSize,且等待队列已满,则调用拒绝策略来处理该任务。
线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行,如果在keepAliveTime里等不到新的任务了,那么线程就会退出。
ThreadPoolExecutor线程池中拒绝策略:
AbortPolicy:为java线程池默认的阻塞策略,不执行此任务,而且会直接抛出一个执行时异常,切记TreadPoolExecutor.execute需要try catch,否则程序会直接退出。
DiscardPolicy:直接抛弃,任务不执行,空方法
DiscardOldestPolicy:从队列里面抛弃head的一个任务,并再次execute 此任务(task)
CallerRunsPolicy:在调用execute的线程里面执行此command,会阻塞入口。
用户自定义拒绝策略:实现RejectdExecutionHandler,并自己定义策略模式。
一周热门 更多>