前言

池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池。池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。本篇主要是和大家一起分析下线程池的架构和它的工作流程。

1、线程池架构图


架构图中,有三个接口,三个类,下面分别介绍下它们:
1、Executor

public interface Executor {void execute(Runnable command);
}

Executor的接口只定义了一个方法,该方法是用来执行已提交的 Runnable 任务的对象。

2、ExecutorService
ExecutorService定义了一系列的“提交”、“关闭”、“执行”等方法,来服务于Executor,从命名上咱们也能理解为什么叫ExecutorService。

3、AbstractExecutorService
AbstractExecutorService抽象类为ExecutorService中的函数接口提供了默认实现。

4、ThreadPoolExecutor
ThreadPoolExecutor这个就是我们常说的“线程池”,该类继承了AbstractExecutorService,具体的分析会在下一篇重点分析。

5、ScheduledExecutorService
ScheduledExecutorService接口从名字上就可以看出来,它相当于提供了“延迟”、“周期”功能的ExecutorService。

6、ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor类就是提供了“延迟”、“周期”功能的ThreadPoolExecutor。

2、工作流程

  1. 主线程创建实现Runnable或Callable接口的任务对象。
  2. 主线程将任务对象交给ExecutorService的实现类(ThreadPoolExecutor或ScheduledThreadPoolExecutor对象)执行execut或者submit方法来执行。
  3. ExecutorService若执行execut方法,则不返回结果;若执行submit方法,则返回FutureTask对象。
  4. 若有返回对象,主线程则执行 FutureTask.get()方法等待任务执行完成。

3、示例

public class ThreadPoolTest {//这里是创建一个2个固定线程的线程池//《阿里巴巴 Java 开发手册》中强制不允许使用 Executors 去创建线程池//详细解释会在下一篇后面给出private static ExecutorService executorService = Executors.newFixedThreadPool(2);public static void main(String[] args) {for (int i=0; i<10; i++){//创建实现Runnable接口的对象Runnable thread = new MyRunnable();//执行任务executorService.execute(thread);}executorService.shutdown();}
}class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}

控制台输出:

pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-1
pool-1-thread-2

结束语

下一篇:java多线程之线程池ThreadPoolExecutor源码分析

如果你觉得本篇文章对你有帮助的话,请帮忙点个赞,再加一个关注。

java多线程之线程池简介相关推荐

  1. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  2. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

  3. Java多线程之线程池的手写改造和拒绝策略

    Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...

  4. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  5. java 多线程使用线程池_Java多线程:如何开始使用线程

    java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...

  6. java多线程及线程池使用

    Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...

  7. Java多线程之线程池的参数和配置

    在Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁.线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能.在Java中,线程池的参数和配置非常重要,不 ...

  8. java多线程和线程池

    目录 零.java线程理解 0.1 两种线程模型 0.1.1 用户级线程 ULT 0.1.2 内核级线程 KLT--JAVA虚拟机使用的线程模型(KLT) 0.2 java线程与系统内核线程 0.3 ...

  9. Java多线程估算线程池

    原理 多线程的线程池可以提高程序的运行性能,这是毋庸置疑的,但是如何设置线程池的大小,以前一直是靠猜,或者根据经验配置,这两天对系统的线程池进行优化配置时,找到了如何合理地估算线程池大小这篇文章,在这 ...

最新文章

  1. linux安装用户名,Linux_Linux下用户名修改法,  在安装系统的时候填写 - phpStudy
  2. JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
  3. 008_Spring Data JPA原生SQL
  4. Matlab中巧用LaTex
  5. iOS拓展---碰到奇葩需求
  6. eclipse安装java web插件
  7. 哈啰出行赴美递交招股书:2020年营收60亿元 顺风车成新增长极
  8. 在finally块中使用try catch,并且catch的时候抛出异常的一个问题
  9. 拓端tecdat|R语言绘制ggplot2双色XY-面积图组合交叉折线图可视化
  10. css学习笔记-黑马程序员前端视频
  11. 2022国二计算机office 考试考试秘籍总结大全
  12. layui 富文本编辑器和textarea值的相互传递
  13. vue3的抽离封装方法
  14. 微信网页扫码登录的实现(两种方式)
  15. 【无标题】电自2104吕薇202130310206
  16. C+++实现推箱子(附加回撤功能)
  17. C++ windows下判断鼠标点击及获取像素点
  18. 二(1-苯基-异喹啉)(乙酰丙酮)合铱(III)
  19. nuxt 如何引入js_Nuxt中引入JS脚本报错
  20. 关于STM32+OLED显示屏的简单应用

热门文章

  1. php万能文章采集器,PHPcms采集器网站采集软件使用文字教程
  2. 对导入的 excel 的时间的处理 将excel表中的时间,转成 标准的时间
  3. MWeb入门-MWeb mac外部模式详细介绍
  4. simulink实现他励直流电动机电枢电压反接制动仿真
  5. C++ 学习路线:快速入门到进阶
  6. linux硬盘可以拆吗,笔记本电脑硬盘拆下来,然后把移动硬盘也拆了,现在把移动硬盘安在笔记本上了,并安装了Linux系统...
  7. CSS渐变(代码写个太阳)
  8. Inpho.DtMaster.v1.0.0 1CD
  9. 安卓移动办公软件_细数小移动办公软件那些痛,戴尔电脑限时5折助力在线办公!...
  10. Flink1.11中的CDC Connectors操作实践