java多线程之线程池简介
前言
池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池。池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。本篇主要是和大家一起分析下线程池的架构和它的工作流程。
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、工作流程
- 主线程创建实现Runnable或Callable接口的任务对象。
- 主线程将任务对象交给ExecutorService的实现类(ThreadPoolExecutor或ScheduledThreadPoolExecutor对象)执行execut或者submit方法来执行。
- ExecutorService若执行execut方法,则不返回结果;若执行submit方法,则返回FutureTask对象。
- 若有返回对象,主线程则执行 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多线程之线程池简介相关推荐
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- Java多线程之线程池配置合理线程数
Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...
- Java多线程之线程池的手写改造和拒绝策略
Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
- java 多线程使用线程池_Java多线程:如何开始使用线程
java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...
- java多线程及线程池使用
Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...
- Java多线程之线程池的参数和配置
在Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁.线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能.在Java中,线程池的参数和配置非常重要,不 ...
- java多线程和线程池
目录 零.java线程理解 0.1 两种线程模型 0.1.1 用户级线程 ULT 0.1.2 内核级线程 KLT--JAVA虚拟机使用的线程模型(KLT) 0.2 java线程与系统内核线程 0.3 ...
- Java多线程估算线程池
原理 多线程的线程池可以提高程序的运行性能,这是毋庸置疑的,但是如何设置线程池的大小,以前一直是靠猜,或者根据经验配置,这两天对系统的线程池进行优化配置时,找到了如何合理地估算线程池大小这篇文章,在这 ...
最新文章
- linux安装用户名,Linux_Linux下用户名修改法, 
在安装系统的时候填写 - phpStudy
- JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
- 008_Spring Data JPA原生SQL
- Matlab中巧用LaTex
- iOS拓展---碰到奇葩需求
- eclipse安装java web插件
- 哈啰出行赴美递交招股书:2020年营收60亿元 顺风车成新增长极
- 在finally块中使用try catch,并且catch的时候抛出异常的一个问题
- 拓端tecdat|R语言绘制ggplot2双色XY-面积图组合交叉折线图可视化
- css学习笔记-黑马程序员前端视频
- 2022国二计算机office 考试考试秘籍总结大全
- layui 富文本编辑器和textarea值的相互传递
- vue3的抽离封装方法
- 微信网页扫码登录的实现(两种方式)
- 【无标题】电自2104吕薇202130310206
- C+++实现推箱子(附加回撤功能)
- C++ windows下判断鼠标点击及获取像素点
- 二(1-苯基-异喹啉)(乙酰丙酮)合铱(III)
- nuxt 如何引入js_Nuxt中引入JS脚本报错
- 关于STM32+OLED显示屏的简单应用
热门文章
- php万能文章采集器,PHPcms采集器网站采集软件使用文字教程
- 对导入的 excel 的时间的处理 将excel表中的时间,转成 标准的时间
- MWeb入门-MWeb mac外部模式详细介绍
- simulink实现他励直流电动机电枢电压反接制动仿真
- C++ 学习路线:快速入门到进阶
- linux硬盘可以拆吗,笔记本电脑硬盘拆下来,然后把移动硬盘也拆了,现在把移动硬盘安在笔记本上了,并安装了Linux系统...
- CSS渐变(代码写个太阳)
- Inpho.DtMaster.v1.0.0 1CD
- 安卓移动办公软件_细数小移动办公软件那些痛,戴尔电脑限时5折助力在线办公!...
- Flink1.11中的CDC Connectors操作实践