IT培训网-IT职场人学IT技术上IT培训网

编程硬核资料库,
随查随看随问答!

免费咨询 0元入学 助学贷款 就业保障 视频下载

Java线程池ThreadPoolExecutor的原理解析是怎样的?

提供专门助学计划,帮助快速进入IT行业,实现人生华丽转身

学IT技术,做互联网行业精英

Java线程池ThreadPoolExecutor的原理解析是怎样的?

0基础进入互联网行业的捷径

选择IT行业
就是选择更傲娇的人生

IT行业均薪领跑7大传统行业

  • 去年各行业月收入对比

  • 今年IT各技术方向行业平均薪资

去年各行业月收入对比

怎样快速入行IT技术 怎样快速入行

今年IT各技术方向行业平均薪资

Java线程池ThreadPoolExecutor的原理解析是怎样的?

哪些人更适合学IT技术?

12大热门IT技术课程,总有一个适合你

Java线程池ThreadPoolExecutor的原理解析是怎样的?

先就业后付款
Java线程池ThreadPoolExecutor的原理解析是怎样的?

IT培训网面向所有课程学员提供先就业后付款学习方案,保证学员稳定就业,可谓0学费!免除学习压力。

正文:

Java线程池ThreadPoolExecutor的原理解析是怎样的?ThreadPoolExecutor里面使用到JUC同步器框架AbstractQueuedSynchronizer、大量的位操作、CAS操作。ThreadPoolExecutor提供了固定活跃线程、额外的线程、任务队列以及拒绝策略这几个重要的功能。下面我们一起来看看Java 线程池ThreadPoolExecutor的原理解析。

1、JUC同步器框架

ThreadPoolExecutor里面使用到JUC同步器框架,主要用于四个方面:

(1)全局锁mainLock成员属性,是可重入锁ReentrantLock类型,主要是用于访问工作线程Worker集合和进行数据统计记录时候的加锁操作。

(2)条件变量termination,Condition类型,主要用于线程进行等待终结awaitTermination()方法时的带期限阻塞。

(3)任务队列workQueue,BlockingQueue类型,任务队列,用于存放待执行的任务。

(4)工作线程,内部类Worker类型,是线程池中真正的工作线程对象。

2、核心线程

这里先参考ThreadPoolExecutor的实现并且进行简化,实现一个只有核心线程的线程池,要求如下:暂时不考虑任务执行异常情况下的处理;任务队列为无界队列;线程池容量固定为核心线程数量;暂时不考虑拒绝策略。

public class CoreThreadPool implements Executor {

private BlockingQueue workQueue;

private static final AtomicInteger COUNTER = new AtomicInteger();

private int coreSize;

private int threadCount = 0;

public CoreThreadPool(int coreSize) {

this.coreSize = coreSize;

this.workQueue = new LinkedBlockingQueue<>();

}

@Override

public void execute(Runnable command) {

if (++threadCount <= coreSize) {

new Worker(command).start();

} else {

try {

workQueue.put(command);

} catch (InterruptedException e) {

throw new IllegalStateException(e);

}

}

}

private class Worker extends Thread {

private Runnable firstTask;

public Worker(Runnable runnable) {

super(String.format("Worker-%d", COUNTER.getAndIncrement()));

this.firstTask = runnable;

}

@Override

public void run() {

Runnable task = this.firstTask;

while (null != task || null != (task = getTask())) {

try {

task.run();

} finally {

task = null;

}

}

}

}

private Runnable getTask() {

try {

return workQueue.take();

} catch (InterruptedException e) {

throw new IllegalStateException(e);

}

}

public static void main(String[] args) throws Exception {

CoreThreadPool pool = new CoreThreadPool(5);

IntStream.range(0, 10)

.forEach(i -> pool.execute(() ->

System.out.println(String.format("Thread:%s,value:%d", Thread.currentThread().getName(), i))));

Thread.sleep(Integer.MAX_VALUE);

}

}

某次运行结果如下:

Thread:Worker-0,value:0

Thread:Worker-3,value:3

Thread:Worker-2,value:2

Thread:Worker-1,value:1

Thread:Worker-4,value:4

Thread:Worker-1,value:5

Thread:Worker-2,value:8

Thread:Worker-4,value:7

Thread:Worker-0,value:6

Thread:Worker-3,value:9

设计此线程池的时候,核心线程是懒创建的,如果线程空闲的时候则阻塞在任务队列的take()方法,其实对于ThreadPoolExecutor也是类似这样实现,只是如果使用了keepAliveTime并且允许核心线程超时则会使用BlockingQueue#poll进行轮询代替永久阻塞。

3、其他附加功能

构建ThreadPoolExecutor实例的时候,需要定义maximumPoolSize(线程池最大线程数)和corePoolSize(核心线程数)。当任务队列是有界的阻塞队列,核心线程满负载,任务队列已经满的情况下,会尝试创建额外的maximumPoolSize - corePoolSize个线程去执行新提交的任务。当ThreadPoolExecutor这里实现的两个主要附加功能是:

(1)一定条件下会创建非核心线程去执行任务,非核心线程的回收周期(线程生命周期终结时刻)是keepAliveTime,线程生命周期终结的条件是:下一次通过任务队列获取任务的时候并且存活时间超过keepAliveTime。

(2)提供拒绝策略,也就是在核心线程满负载、任务队列已满、非核心线程满负载的条件下会触发拒绝策略。

以上所介绍的就是Java 线程池ThreadPoolExecutor的原理解析相关内容,大家都看懂了吗?如果想要深入学习更多关于Java 线程池的内容,欢迎大家在IT培训网报名在线课程进行学习~

IT技术学员就业薪资

13000
薪资

姓名:左*飞
学历:专科
专业:理学与信息科学学院
薪资:13000
入职单位:北京惠信数据

数据来自学员真实就业
拒绝以偏概全

姓名 学历 入职单位 专业 薪水 福利
刘*东 专科 保密 信息工程系 12000 五险一金
刘*东 专科 保密 信息工程系 12000 五险一金
刘*东 专科 保密 信息工程系 12000 五险一金
了解更多学员毕业薪资

多种班型任选,上课方式灵活

Java线程池ThreadPoolExecutor的原理解析是怎样的?

学习就业全方位服务,IT培训选更省心的机构

Java线程池ThreadPoolExecutor的原理解析是怎样的?

教学研发

1 项目经理跟班
2 大咖讲师面授
3 名企特聘教学
4 企业场景实操

具体有哪些服务内容

品质保障

1 1对1指导
2 模拟面试
3 职业发展规划
4 终生技术提升

具体有哪些服务内容

就业服务

1 企业定制
2 名企双选会
3 上门招聘
4 企业内推

具体有哪些服务内容

21大课程全新全套学习资料限时免费下载

价值千元学习视频,其他机构花钱买,IT培训网免费送

每年2万人因口碑选择IT培训网学IT

Java线程池ThreadPoolExecutor的原理解析是怎样的?

在乎每一位学员的职业梦想,坚持教育初心

20000
年培养学员
5000
同期在校学员
16
培训中心遍布全国
20
开设培训中心
500
合作院校
10000
合作企业
12
目前开设课程
200
讲师团队

你关心的问题都在这里

就业优势 就业优势

一地学习 全国就业

· 就业保障体系覆盖全国,
· 10000多家合作企业定期招聘,
· 学员就业可随心选择。

不同的城市
同样的全程面授
IT培训网始终在坚持

· 全国各校区讲师统一管理,招聘标准一致,
· 课程大纲全范围内定期升级更新,
· 保障学员学习质量