请选择 进入手机版 | 继续访问电脑版

Java 从源码的角度去分析:为什么建议手动创建线程池

[复制链接]
卓小兔 发表于 2021-1-1 18:33:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
提供的有四种线程池:Executors.newFixedThreadPool()、Executors.newSingleThreadExecutor()、Executors.newCachedThreadPool()、Executors.newScheduledThreadPool()
两两为例,从源码的角度去分析这些线程池有什么问题:
第一组Executors.newFixedThreadPool()和Executors.newSingleThreadExecutor()
Executors.newFixedThreadPool():
定长线程池,参数为焦点线程池数量,最大=焦点,LinkedBlockingQueue有界队列(长度为Interger.MAX_VALUE)
源码:
  1. public static ExecutorService newFixedThreadPool(int nThreads) {        return new ThreadPoolExecutor(nThreads, nThreads,                                      0L, TimeUnit.MILLISECONDS,                                      new LinkedBlockingQueue());    }
复制代码
Executors.newSingleThreadExecutor():
单线程池,焦点=最大=1,LinkedBlockingQueue有界队列(长度为Interger.MAX_VALUE)
源码:
  1. public static ExecutorService newSingleThreadExecutor() {        return new FinalizableDelegatedExecutorService            (new ThreadPoolExecutor(1, 1,                                    0L, TimeUnit.MILLISECONDS,                                    new LinkedBlockingQueue()));    }
复制代码
为什么说LinkedBlockingQueue是有界队列呢,让我们看看LinkedBlockingQueue的源码:
[code]public LinkedBlockingQueue() {     this(Integer.MAX_VALUE); } /**  * Creates a {@code LinkedBlockingQueue} with the given (fixed) capacity.  *  * @param capacity the capacity of this queue  * @throws IllegalArgumentException if {@code capacity} is not greater  *         than zero  */ public LinkedBlockingQueue(int capacity) {     if (capacity
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )