全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java concurrency线程池之线程池原理(一)_动力节点Java学院整理

ThreadPoolExecutor简介

ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为"存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。" 

ThreadPoolExecutor数据结构

ThreadPoolExecutor的数据结构如下图所示:

各个数据在ThreadPoolExecutor.java中的定义如下:

// 阻塞队列。
private final BlockingQueue<Runnable> workQueue;
// 互斥锁
private final ReentrantLock mainLock = new ReentrantLock();
// 线程集合。一个Worker对应一个线程。
private final HashSet<Worker> workers = new HashSet<Worker>();
// “终止条件”,与“mainLock”绑定。
private final Condition termination = mainLock.newCondition();
// 线程池中线程数量曾经达到过的最大值。
private int largestPoolSize;
// 已完成任务数量
private long completedTaskCount;
// ThreadFactory对象,用于创建线程。
private volatile ThreadFactory threadFactory;
// 拒绝策略的处理句柄。
private volatile RejectedExecutionHandler handler;
// 保持线程存活时间。
private volatile long keepAliveTime;

private volatile boolean allowCoreThreadTimeOut;
// 核心池大小
private volatile int corePoolSize;
// 最大池大小
private volatile int maximumPoolSize;

 

1. workers

    workers是HashSet<Work>类型,即它是一个Worker集合。而一个Worker对应一个线程,也就是说线程池通过workers包含了"一个线程集合"。当Worker对应的线程池启动时,它会执行线程池中的任务;当执行完一个任务后,它会从线程池的阻塞队列中取出一个阻塞的任务来继续运行。
    wokers的作用是,线程池通过它实现了"允许多个线程同时运行"。

2. workQueue

    workQueue是BlockingQueue类型,即它是一个阻塞队列。当线程池中的线程数超过它的容量的时候,线程会进入阻塞队列进行阻塞等待。
    通过workQueue,线程池实现了阻塞功能。

3. mainLock

    mainLock是互斥锁,通过mainLock实现了对线程池的互斥访问。

4. corePoolSize和maximumPoolSize

    corePoolSize是"核心池大小",maximumPoolSize是"最大池大小"。它们的作用是调整"线程池中实际运行的线程的数量"。
    例如,当新任务提交给线程池时(通过execute方法)。
          -- 如果此时,线程池中运行的线程数量< corePoolSize,则创建新线程来处理请求。
          -- 如果此时,线程池中运行的线程数量> corePoolSize,但是却< maximumPoolSize;则仅当阻塞队列满时才创建新线程。
          如果设置的 corePoolSize 和 maximumPoolSize 相同,则创建了固定大小的线程池。如果将 maximumPoolSize 设置为基本的无界值(如 Integer.MAX_VALUE),则允许池适应任意数量的并发任务。在大多数情况下,核心池大小和最大池大小的值是在创建线程池设置的;但是,也可以使用 setCorePoolSize(int) 和 setMaximumPoolSize(int) 进行动态更改。

5. poolSize

    poolSize是当前线程池的实际大小,即线程池中任务的数量。

6. allowCoreThreadTimeOut和keepAliveTime

    allowCoreThreadTimeOut表示是否允许"线程在空闲状态时,仍然能够存活";而keepAliveTime是当线程池处于空闲状态的时候,超过keepAliveTime时间之后,空闲的线程会被终止。

7. threadFactory

    threadFactory是ThreadFactory对象。它是一个线程工厂类,"线程池通过ThreadFactory创建线程"。

8. handler

    handler是RejectedExecutionHandler类型。它是"线程池拒绝策略"的句柄,也就是说"当某任务添加到线程池中,而线程池拒绝该任务时,线程池会通过handler进行相应的处理"。

综上所说,线程池通过workers来管理"线程集合",每个线程在启动后,会执行线程池中的任务;当一个任务执行完后,它会从线程池的阻塞队列中取出任务来继续运行。阻塞队列是管理线程池任务的队列,当添加到线程池中的任务超过线程池的容量时,该任务就会进入阻塞队列进行等待。 

线程池调度

我们通过下面的图看看下面线程池中任务的调度策略,加深对线程池的理解。

图-01:

图-02:

说明:

    在"图-01"中,线程池中有N个任务。"任务1", "任务2", "任务3"这3个任务在执行,而"任务3"到"任务N"在阻塞队列中等待。正在执行的任务,在workers集合中,workers集合包含3个Worker,每一个Worker对应一个Thread线程,Thread线程每次处理一个任务。
    当workers集合中处理完某一个任务之后,会从阻塞队列中取出一个任务来继续执行,如图-02所示。图-02表示"任务1"处理完毕之后,线程池将"任务4"从阻塞队列中取出,放到workers中进行处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # concurrency  # 线程池  # Java concurrency线程池之线程池原理(三)_动力节点Java学院整理  # Java concurrency线程池之线程池原理(二)_动力节点Java学院整理  # Java concurrency线程池之线程池原理(四)_动力节点Java学院整理  # 池中  # 它是  # 它会  # 句柄  # 数据结构  # 实现了  # 所示  # 互斥  # 也就是说  # 就会  # 是在  # 会有  # 多个  # 可以使用  # 如图  # 将它  # 设置为  # 时才  # 完成任务  # 完后 


相关文章: 网站制作公司,橙子建站是合法的吗?  建站之星如何通过成品分离优化网站效率?  怀化网站制作公司,怀化新生儿上户网上办理流程?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  Swift中switch语句区间和元组模式匹配  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  宿州网站制作公司兴策,安徽省低保查询网站?  浅谈Javascript中的Label语句  *服务器网站为何频现安全漏洞?  如何选择香港主机高效搭建外贸独立站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  高性价比服务器租赁——企业级配置与24小时运维服务  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  孙琪峥织梦建站教程如何优化数据库安全?  如何有效防御Web建站篡改攻击?  如何在万网ECS上快速搭建专属网站?  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何获取免费开源的自助建站系统源码?  网站制作话术技巧,网站推广做的好怎么话术?  视频网站制作教程,怎么样制作优酷网的小视频?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何快速配置高效服务器建站软件?  宁波自助建站系统如何快速打造专业企业网站?  存储型VPS适合搭建中小型网站吗?  高端网站建设与定制开发一站式解决方案 中企动力  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  小建面朝正北,A点实际方位是否存在偏差?  如何通过云梦建站系统实现SEO快速优化?  如何选择域名并搭建高效网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何在IIS7中新建站点?详细步骤解析  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何在阿里云高效完成企业建站全流程?  如何通过商城自助建站源码实现零基础高效建站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  c++怎么用jemalloc c++替换默认内存分配器【性能】  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  建站主机功能解析:服务器选择与快速搭建指南  七夕网站制作视频,七夕大促活动怎么报名?  如何挑选最适合建站的高性能VPS主机?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何通过VPS搭建网站快速盈利?  建站主机是否等同于虚拟主机?  南京网站制作费用,南京远驱官方网站?  建站之星后台密码遗忘?如何快速找回?  如何在Windows服务器上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。