【Java】浅析线程池ThreadPoolExecutor基本功能的实现

本文主要介绍了Java线程池ThreadPoolExecutor的功能、设计及基本流程。线程池通过工作线程、任务队列和可取消任务实现任务调度。提交任务后,线程池根据核心线程数和任务队列容量决定是否立即执行。关闭线程池时,可以选择等待任务执行完毕或立即关闭。了解这些基础知识有助于深入理解线程池的工作原理。
摘要由CSDN通过智能技术生成

一、线程池功能

大概可以有分为下面两类功能

  1. 执行任务
  2. 取消任务

二、线程池抽象

Java中对线程池的抽象叫ExecutorService,继承自Executor
在这里插入图片描述

Java执行任务的抽象叫做Executor
在这里插入图片描述

三、线程池ThreadPoolExecutor设计

⚠️⚠️⚠️⚠️为了简化分析,省略了大量的细节⚠️⚠️⚠️⚠️⚠️

首先,线程池要能够调度某个线程去执行任务,那么就需要有一个集合来保存已经创建的线程,称为关于线程的集合
其次,向线程池提交任务,那么线程池可能不会立即执行,那么需要有一个集合来保存已经提交的任务,称为关于任务的集合
然后,线程池要终止某个任务,那么线程池持有的任务,必须具备可以取消的性质,需要一种可以被取消的任务,称为任务

👆三个关键的东西,在ThreadPoolExecutor中分别对应:

任务 => Worker
关于任务的集合 => BlockingQueue<Runnable> workQueue
关于线程的集合=> HashSet<Worker> workers

可以发现,他们都围绕着Worker展开

ThreadPoolExecutor.Worker基本功能解析

Worker是啥?

Worker的字段里面包含了一个线程的引用thread和一个初始任务的引用firstTask

为什么要有初始任务呢?

  • 你想一个线程被创建出来啥也不干,好像也没必要创建
  • 再者,因为线程不只执行一个任务,但是如果它连自己的初始任务都没执行完(firstTask != null),哪有空去做其他任务。
Worker的功能是啥?
  1. Thread绑定在一起,然后在Thread不断地从任务集合workQueue里面取出任务执行
  2. 能够收到线程池的关闭命令,完成终止任务的操作

首先看第一个功能,定位到Workerrun()方法

 /** Delegates main run loop to outer runWorker. */
	public void run() {
   
		runWorker(this);
    }

再看runWorker(this),传入的是一个Worker实例。为了简单的理解runWorker()就是在不断的去任务集合workQueue里面取出任务执行

final void runWorker
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值