蓝色字体
,选择“标星公众号”
juejin.im/post/5a28b37c6fb9a044fc44a103
有时候花了大把时间去看一些东西却看不懂,是很 “ 蓝瘦 ” 的,花时间也是投资。
本文适合:
曾了解过线程池却一直模模糊糊的人 了解得差不多却对某些点依然疑惑的
不适合:
完全没看过的,建议你先去看看其他基础文章 看过,却忘得差不多了,建议你先去回顾下
本文能给你的阅读回报
适合的读者,尽可能让你彻底明白 常用的线程池
的知识相关点 不适合的读者,能有个不错的概念,神童另谈
废话少说,我们开始。
默认构造函数
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler
{
....
}
绝对易懂的构造方法参数讲解
corePoolSize,maximumPoolSize,workQueue之间关系。
文字描述
一般流程图
newFixedThreadPool 流程图
public static ExecutorService newFixedThreadPool(int nThreads){
return new ThreadPoolExecutor(
nThreads, // corePoolSize
nThreads, // maximumPoolSize == corePoolSize
0L, // 空闲时间限制是 0
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>() // 无界阻塞队列
);
}
newCacheThreadPool 流程图
public static ExecutorService newCachedThreadPool(){
return new ThreadPoolExecutor(
0, // corePoolSoze == 0
Integer.MAX_VALUE, // maximumPoolSize 非常大
60L, // 空闲判定是60 秒
TimeUnit.SECONDS,
// 神奇的无存储空间阻塞队列,每个 put 必须要等待一个 take
new SynchronousQueue<Runnable>()
);
}
newSingleThreadPool 流程图
public static ExecutorService newSingleThreadExecutor() {
return
new FinalizableDelegatedExecutorService
(
new ThreadPoolExecutor
(
1,
1,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory
)
);
}
FinalizableDelegatedExecutorService
代理,其初始化和
newFiexdThreadPool
的 nThreads = 1 的时候是一样的。区别就在于:
ThreadFactory
,可以改变线程的名称、线程组、优先级、守护进程状态,一般采用默认。
最后
ScheduledThreadPool
如果喜欢本篇文章,欢迎转发、点赞。关注订阅号「Web项目聚集地」,回复「全栈」即可获取 2019 年最新 Java、Python、前端学习视频资源。
推荐阅读
1. 这代码写的,狗屎一样
2. 这代码写的,狗屎一样 (下)
3. 除了负载均衡,Nginx 还可以做很多
4. 快来薅当当的羊毛 !
5. 聊一聊 Java 泛型中的通配符
6. 数据库不使用外键的 9 个理由
在看
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
相关文章
暂无评论...