2. 线程池
2019-10-18 11:15:36 0 举报
AI智能生成
java线程池
作者其他创作
大纲/内容
使用
基本用法:Executors
newScheduledThreadPool
newCachedThreadPool
newSingleThreadExecutor
newFixedThreadPool
实现原理
关键类
Executors
ThreadPoolExecutor
ExecutorService
ScheduledThreadPoolExecutor
设计理念
为什么要有线程池
开销
状态
子主题
子主题
初始化
prestartAllCoreThreads:初始化所有核心线程
prestartCoreThread:初始化一个核心线程
拒绝策略
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
CallerRunsPolicy
流程过程
ThreadPoolExecutor
必备参数
corePoolSize:核心线程数
如果运行的线程少于 corePoolSize,则创建新线程来处理任务,即使线程池中的其他线程是空闲的;
如果线程池中的线程数量大于等于 corePoolSize 且小于 maximumPoolSize,则只有当workQueue满时才创建新的线程去处理任务;
如果设置的corePoolSize 和 maximumPoolSize相同,则创建的线程池的大小是固定的,这时如果有新任务提交,若workQueue未满,则将请求放入workQueue中,等待有空闲的线程去从workQueue中取任务并处理;
如果运行的线程数量大于等于maximumPoolSize,这时如果workQueue已经满了,则通过handler所指定的策略来处理任务;
maximumPoolSize:最大线程数
keepAliverTime:空闲存活时间
unit:存活时间单位
workQueue:工作队列
handler:饱和策略
AbortPolicy:直接抛出异常,这是默认策略;
CallerRunsPolicy:用调用者所在的线程来执行任务;
DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
DiscardPolicy:直接丢弃任务;
ThreadFactory:创建线程的工厂
参考
https://juejin.im/entry/58fada5d570c350058d3aaad
https://www.cnblogs.com/dolphin0520/p/3932921.html
BlockingQueue
参考
https://www.infoq.cn/article/java-blocking-queue
方法
增
add
offer
offer(timeout)
put
删
remove
poll
poll(timeout)
take
查
具体实现
ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列。
参考
https://www.cnblogs.com/dwlsxj/p/Thread.html
https://blog.csdn.net/yanyan19880509/article/details/52562039
https://www.cnblogs.com/dwlsxj/p/synchronousqueue-unfair-pattern.html
https://blog.csdn.net/demon7552003/article/details/92080415
DelayQueue:一个使用优先级队列实现的无界阻塞队列。
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
参考
https://leokongwq.github.io/2016/10/16/java-BlockingQueue.html
扩展
如何合理选择线程池大小
https://www.cnblogs.com/myseries/articles/11525684.html
0 条评论
下一页