java并发编程(9)-- 线程池 创建 参数
一、线程池基本概念
概念:
线程池主要是控制运⾏线程的数量,将待处理任务放到等待队列,然后创建线程执⾏这些任务。
如果超过了最⼤线程数,则等待。
为什么⽤线程池?
10年前单核CPU电脑,假的多线程,像⻢戏团⼩丑玩多个球,CPU需要来回切换。
现在是多核电脑,多个线程各⾃跑在独⽴的CPU上,不⽤切换效率⾼。
线程池的优点:
- 线程池做的⼯作只要是控制运⾏的线程数量,
- 处理过程中将任务放⼊队列,然后在线程创建后启动这些 任务,
- 如果线程数量超过了最⼤数量,超出数量的线程排队等候,等其他线程执⾏完毕,再从队列中取 出任务来执⾏。
线程池的主要特点为:
线程复⽤;控制最⼤并发数;管理线程。
1. 线程复⽤:不⽤⼀直new新线程,重复利⽤已经创建的线程来降低线程的创建和销毁开销,节省系 统资源。
2. 提⾼响应速度:当任务达到时,不⽤创建新的线程,直接利⽤线程池的线程。
3. 管理线程:可以控制最⼤并发数,控制线程的创建等。
体系:
Executor → ExecutorService → AbstractExecutorService → ThreadPoolExecutor 。
Thr eadPoolExecutor 是线程池创建的核⼼类。类似 Arrays 、 Collections ⼯具类, Executor 也有⾃⼰的⼯具类 Executors 。
二、线程池三种常⽤创建⽅式
Java中的线程池是通过Executor框架实现的,该框架中⽤到了Executor,Executors, ExecutorService,ThreadPoolExecutor这⼏个类。
newFixedThreadPool线程池
使⽤LinkedBlockingQueue 实现,定⻓线程池。
特点:执⾏⻓期任务性能好,创建⼀个线程池,⼀池有N个固定的线程,有固定线程数的线程
newSingleThreadExecutor线程池
使⽤ LinkedBlockingQueue 实现,⼀池只有⼀个线程。
特点:⼀个任务⼀个任务的执⾏,⼀池⼀线程
newCachedThreadPool线程池
使⽤ SynchronousQueue 实现,变⻓线程池。
特点:
执⾏很多短期异步任务,线程池根据需要创建新线程,但在先前构建的线程可⽤时将重⽤他们。
可扩容,遇强则强
三、线程池代码演示
package thread;import java.util.concurrent.*;/*** 线程池代码演示*/
public class ThreadPoolDemo {public static void main(String[] args) {//System.out.println("=======Fixed Thread Pool========");// // ⼀个池⼦有5个⼯作线程,类似银⾏有5个受理窗⼝//threadPoolTask( Executors.newFixedThreadPool(5) );//System.out.println("======Single Thread Pool=========");// // ⼀个池⼦有1个⼯作线程,类似银⾏有1个受理窗⼝// threadPoolTask( Executors.newSingleThreadExecutor() );// System.out.println("=====Cached Thread Pool=======");// // 不定量线程,⼀个池⼦有N个⼯作线程,类似银⾏有N个受理窗⼝// threadPoolTask( Executors.newCachedThreadPool() );System.out.println(" =====Custom Thread Pool=======");threadPoolTask(new ThreadPoolExecutor(2,5,1L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy()));}private static void threadPoolTask(ExecutorService threadPool) {//模拟有10个顾客来办理业务try {for (int i = 1; i <= 10; i++) {threadPool.execute(() -> {System.out.println(Thread.currentThread().getName() + "\t办理业务");});}} catch (Exception e) {e.printStackTrace();} finally {threadPool.shutdown();}}}
四、线程池创建的七个参数
java并发编程(9)-- 线程池 创建 参数相关推荐
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
- Java并发编程一线程池简介
推荐:Java并发编程汇总 Java并发编程一线程池简介 为什么我们需要使用线程池? 我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的 ...
- Java并发编程一线程池的五种状态
推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
文章目录 一.线程池阻塞队列 二.拒绝策略 三.使用 ThreadPoolExecutor 自定义线程池参数 一.线程池阻塞队列 线程池阻塞队列是线程池创建的第 555 个参数 : BlockingQ ...
- Java并发编程:线程池
一.为什么使用线程池 使用线程的时候直接就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降 ...
- Java并发编程之线程池及示例
1.Executor 线程池顶级接口.定义方法,void execute(Runnable).方法是用于处理任务的一个服务方法.调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runn ...
最新文章
- rsync+shell脚本完成自动化备份
- IntelliJ IDEA 旗舰版(Ultimate) 破解与注册(可以在加载界面显示自己名字)
- LInux CentOS6 无人值守安装实例(原作)
- lambda :: -_无需再忙了:Lambda-S3缩略图,由SLAppForge Sigma钉牢!
- MsSql正反表达式
- 计算机硬软件故障实训报告,计算机维护维修实训报告.docx
- centos7最小化安装后mysql_CentOS 7 最小化安装之后安装Mysql
- edge 浏览器中数字显示为链接
- 接口调用导致阻塞_RocketMQ与Dubbo之间线程之间如何阻塞和唤醒
- Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...
- 数据挖掘十大算法之C4.5
- java解析axure原型rp文件_AxureRP原型制作中在线文件的存储方案
- GitLab 创建项目组及将代码导入项目
- unity材质球发光_为Unity3D创建素材(1):图片、着色器、材质球
- webstorm2020背景和字体_怎么为WebStorm更换主题 修改字体样式
- matlab二元多项式求值,matlab多项式代入求值
- 网桥15式:无线网桥用得好,成本的降低少不了
- 每日C语言代码(The fifth day)——求素数
- warsong服务器维修,3.3冰冠要塞:最终巫妖王揭秘 技能介绍
- 网贷数据爬取及据分析
热门文章
- DB2创建数据库示例
- 错误与异常_1-5选择题
- 【redis】spring boot利用redis的Keyspace Notifications实现消息通知
- yii2 gii页面404和debug调试栏无法显示解决方法
- CodeSmith连接Mysql配置
- tomcat 虚拟目录与显示目录中文件列表
- HTTP Error 404 - File or Directory not found caused by ISAPI filter of Sharepoint
- C语言字符型数据scanf,scanf()函数如何输入字符型数据?
- 拓端tecdat|R语言:状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列
- 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据