java线程池详解

参考文章:ThreadPoolExecutor使用详解
参考文章:ThreadPoolExecutor线程池解析与BlockingQueue的三种实现

  • 构造有定时功能的线程池,配置corePoolSize,无界延迟阻塞队列DelayedWorkQueue;有意思的是:maximumPoolSize=Integer.MAX_VALUE,由于DelayedWorkQueue是 无界队列,所以这个值是没有意义

  • 对于无界队列来说,总是可以加入的(资源耗尽,当然另当别论)。换句说,永远也不会触发产生新的线程!corePoolSize大小的线程数会一直运行,忙完当前的,就从队列中拿任务开始运行。所以要防止任务疯长,比如任务运行的实行比较长,而添加任务的速度远远超过处理任务的时间,而且还不断增加,如果任务内存大一些,不一会儿就爆了

固定线程数量的,有定时功能的线程池

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }

public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }

public ScheduledThreadPoolExecutor(int corePoolSize,
                             ThreadFactory threadFactory) {
        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
              new DelayedWorkQueue(), threadFactory);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章讲述Java中的线程池问题,同样适用于Android中的线程池使用。本篇文章参考:Java线程池分析,Ja...
    Ruheng阅读 11,952评论 1 64
  • 1. 线程池的概念 1.1 基本概念 由于线程的生命周期中包括创建、就绪、运行、阻塞、销毁阶段,当我们待处理的任务...
    Java旅行者阅读 5,492评论 0 31
  • Java 线程池 Java 线程池模型的关键几个类和接口包括:Executor,Executors,Executo...
    duval阅读 3,764评论 0 0
  • 各项散碎点整理(为大脑减负,将所学所用梳理系统化网络化模块化) *** 如有失效或错链烦请指点 *** iOS_p...
    莫_名阅读 1,911评论 0 0
  • 记得才买车的时候,小怪兽上小学。有天早上,我和骆女侠一起开车送小怪兽上学。当时骆女侠和小怪兽坐在后排。 襄州区的交...
    王新屏阅读 3,294评论 0 0