线程池ThreadPoolExecutor学习总结

线程池ThreadPoolExecutor学习总结
1.ThreadPoolExecutor构造方法参数解释
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue) {
    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
         Executors.defaultThreadFactory(), defaultHandler);
}
  • corePoolSize 核心线程数量
  • maximumPoolSize 最大线程数量
  • keepAliveTime 空闲时非核心线程存活时间
  • unit 存活时间的单位,枚举参数
  • work Queue 存储任务的队列
2.Executors工厂类的四种线程池
  • newFixedThreadPool(int nThreads);

    return newThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>())ding;
    

    定长线程池,以固定的线程数量运行,当任务提交数量超出容量,会把任务塞进无限长的队列中。适合用于削峰、长期运行固定数量的任务。

  • newSingleThreadExecutor()

    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
    

    单线程版的定长线程池,一次只能执行一个任务,其他任务只能塞进队列。

  • newCachedThreadPool()

    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>());
    

    缓存线程池,当没有任务执行时,线程会在一分钟后关闭。当提交任务时,会立刻起一个线程去执行,可以起Integer的最大值的线程数量。适合执行短期、且数量大的小任务。

  • newScheduledThreadPool(int corePoolSize)

    return new ScheduledThreadPoolExecutor(corePoolSize);
    --------------------------------------------------------------
        public ScheduledThreadPoolExecutor(int corePoolSize) {
            super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
                  new DelayedWorkQueue());
        }
    

    计划线程池,用于执行定时任务,可以指定何时启动线程以及一定的周期循环执行线程。比较适合替代Timer工具类。

3.线程池执行规则
  1. 当任务数量小于核心线程数量(corePoolSize)时,新任务进来时,任务提交给核心线程执行(核心线程常驻于线程池,假如不指定空闲超时时间,不会自动销毁,无论有没有任务执行)。
  2. 当任务数量大于核心线程数量,新任务提交时,优先暂存进队列。
  3. 当任务数量大于核心线程数量,且队列已经满了,新任务提交时,如果此时线程总数小于最大线程数量(maximumPoolSize)会另起一个非核心线程来执行新任务,非核心线程执行任务完毕后,如果在指定时间内空闲,会自动销毁。
  4. 当任务数量大于最大线程数量,新任务提交时,会被线程池拒绝,并抛出异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值