美文网首页
ThreadPool

ThreadPool

作者: hehehehe | 来源:发表于2020-06-13 12:01 被阅读0次

线程池核心参数

corePoolSize: int 核心线程数

线程池初始化后,线程池中没有任何线程,线程池会等待任务再创建新线程去执行任务
线程池会在核心线程数的基础上,额外增加一些线程,额外增加的限度的上限叫maxPoolSize
1、如果线程数小于corePoolSize ,即使有其他线程处于空闲状态也会创建新线程来运行新任务
2、如果线程数等于或大于corePoolSize,但是小于maximumPoolSize,则将任务放入队列
3、如果队列已满,并且线程数小于maximumPoolSize,则创建新线程来运行任务
4、如果队列已满,并且线程数大于等于maxPoolSize,则执行拒绝策略拒绝任务

maximumPoolSize: int 最大线程数
keepAliveTime: long 保持存活时间

数量大于corePoolSize 部分线程在空闲情况下的存活时间

workQueue: BlockingQueue 任务存储队列

1、直接队列:SynchornousQueue 无缓存
2、无界队列 LinkedBlockingQueue
3、有界队列 ArrayBlockingQueue

threadFactory:

创建新线程时候的创建工程类

Handler: rejectExceptionHandler

AbortPolicy 抛出异常
DiscardPolicy 丢弃
DiscardOldestPolicy 丢弃队列中老任务
CallerRunsPolicy 让主线程提交者执行任务

fixedThreadPool corePoolSize = maximumPoolSize
使用的是无界队列,队列里的东西过多会导致oom
singleThreadExcutor 也是无界队列
cachedThreadPool corePoolSize = 0 maximumPoolSize = Integer.Max
可缓存线程池,无界线程池,直接交换队列
ScheduledThreadPool

勾子方法

线程池是如何复用线程的

通过拿到任务task,直接执行 task.run()

相关文章

网友评论

      本文标题:ThreadPool

      本文链接:https://www.haomeiwen.com/subject/ioyatktx.html