Java8 ThreadPoolExecutor线程池分析

Java8 ThreadPoolExecutor线程池分析

一.构造函数

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {...}
                          
上面是Java8 ThreadPoolExecutor最丰富的构造函数,参数如下:
1.corePoolSize:线程池中保留的线程数,即使它们是空闲的,除非设置了allowCoreThreadTimeOut,该参数默认为false;
2.maximumPoolSize:线程池中允许的最大线程数;
3.keepAliveTime:当线程数大于核心时,空闲线程等待新任务的最长时间,超时候空闲线程关闭;
4.unit:keepAliveTime的时间单位;
5.workQueue:在任务执行前用于保留任务的队列,通常称为等待队列;
6.threadFactory:创建新线程时使用的工厂类;
7.handler:达到任务队列容量,阻止任务执行时的处理类。

二.任务执行流程

为了使流程图中的逻辑易读,调整了原代码一些参数名称,参数类型则保持不变。

p1

三.任务执行分析

流程图中节点的分析:
1.execute:提交一个任务command;
2.addWordker:继续提交一个任务command;
3.new Worker():创建一个执行线程w;
4.workers.add:将线程w提交至线程池workers;
5.t.start:启动线程w;
6.Worker.run:线程w执行;
7.runWorker:继续线程w执行;
8.task=w.command:获取提交的任务command;
9.while:线程w轮询执行command;
10.comman.run:在线程w中执行任务command,由于调用的是command.run方法,所以不会启动新的线程;
11.processWorkerExit:当前没有任务执行时,线程w退出;
12.workers.remove(w):线程池workers删除线程w;
13.addWorker(null, false):提交null任务,如步骤2,保持核心线程数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值