一、线程池基本概念

概念:

线程池主要是控制运⾏线程的数量,将待处理任务放到等待队列,然后创建线程执⾏这些任务。

如果超过了最⼤线程数,则等待。

为什么⽤线程池?

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)-- 线程池 创建 参数相关推荐

  1. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  2. [转]Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  3. Java并发编程:线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  4. 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )

    文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...

  5. Java并发编程一线程池简介

    推荐:Java并发编程汇总 Java并发编程一线程池简介 为什么我们需要使用线程池? 我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的 ...

  6. Java并发编程一线程池的五种状态

    推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...

  7. (转)Java并发编程:线程池的使用

    背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...

  8. 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )

    文章目录 一.线程池阻塞队列 二.拒绝策略 三.使用 ThreadPoolExecutor 自定义线程池参数 一.线程池阻塞队列 线程池阻塞队列是线程池创建的第 555 个参数 : BlockingQ ...

  9. Java并发编程:线程池

    一.为什么使用线程池 使用线程的时候直接就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降 ...

  10. Java并发编程之线程池及示例

    1.Executor 线程池顶级接口.定义方法,void execute(Runnable).方法是用于处理任务的一个服务方法.调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runn ...

最新文章

  1. rsync+shell脚本完成自动化备份
  2. IntelliJ IDEA 旗舰版(Ultimate) 破解与注册(可以在加载界面显示自己名字)
  3. LInux CentOS6 无人值守安装实例(原作)
  4. lambda :: -_无需再忙了:Lambda-S3缩略图,由SLAppForge Sigma钉牢!
  5. MsSql正反表达式
  6. 计算机硬软件故障实训报告,计算机维护维修实训报告.docx
  7. centos7最小化安装后mysql_CentOS 7 最小化安装之后安装Mysql
  8. edge 浏览器中数字显示为链接
  9. 接口调用导致阻塞_RocketMQ与Dubbo之间线程之间如何阻塞和唤醒
  10. Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...
  11. 数据挖掘十大算法之C4.5
  12. java解析axure原型rp文件_AxureRP原型制作中在线文件的存储方案
  13. GitLab 创建项目组及将代码导入项目
  14. unity材质球发光_为Unity3D创建素材(1):图片、着色器、材质球
  15. webstorm2020背景和字体_怎么为WebStorm更换主题 修改字体样式
  16. matlab二元多项式求值,matlab多项式代入求值
  17. 网桥15式:无线网桥用得好,成本的降低少不了
  18. 每日C语言代码(The fifth day)——求素数
  19. warsong服务器维修,3.3冰冠要塞:最终巫妖王揭秘 技能介绍
  20. 网贷数据爬取及据分析

热门文章

  1. DB2创建数据库示例
  2. 错误与异常_1-5选择题
  3. 【redis】spring boot利用redis的Keyspace Notifications实现消息通知
  4. yii2 gii页面404和debug调试栏无法显示解决方法
  5. CodeSmith连接Mysql配置
  6. tomcat 虚拟目录与显示目录中文件列表
  7. HTTP Error 404 - File or Directory not found caused by ISAPI filter of Sharepoint
  8. C语言字符型数据scanf,scanf()函数如何输入字符型数据?
  9. 拓端tecdat|R语言:状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列
  10. 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据