Java并发编程-ThreadPoolExecutor 线程池

目录

 

1. 概述

2. 使用线程池可带来哪些优点

3. 线程池实现/工作原理

4. 创建线程池的几种不同方式

4.1 newSingleThreadExecutor()

4.2 newCachedThreadPool()

4.3 newFixedThreadPool(int nThreads)

4.4 newSingleThreadScheduledExecutor() 和 newScheduleThreadPool(int corePoolSize)

4.5 newWorkStrealingPool(int parallelism)

4.6 ThreadPoolExecutor

5. ThreadPollExecutor 构造方法介绍

6. 参考资料


1. 概述

线程池是运用场景最多的并发框架,异步或并发执行的任务都可以使用。

提示:本文根据一些资料学习总结而成,文末有参考链接

 


2. 使用线程池可带来哪些优点

  • 降低资源消耗: 重复利用已创建的线程,降低线程创建和消费造成的消耗。
  • 提高任务响应速度: 提交任务时,可直接运行,不必等待创建一个新的线程。
  • 提高线程的可管理性: 线程池可对线程进行统一分配调优监控,防止无限制创建消耗系统资源、降低系统稳定性。

 


3. 线程池实现/工作原理

提交新任务到线程池时,线程池的处理流程如下图所示:

Java并发编程-ThreadPoolExecutor 线程池_第1张图片

图上图所示,判断节点的顺序分别是 coreSize -- > queue --> maxSize --> rejectStrategy

 

例如当调用了ThreadPoolExecutor执行execute()方式时,流程示意图如下,对应刚刚上图的一个处理流程,其中步骤1、3创建新的线程时需要获取全局锁(会影响性能)

Java并发编程-ThreadPoolExecutor 线程池_第2张图片

 


4. 创建线程池的几种不同方式

线程池有以下几个创建方式

4.1 newSingleThreadExecutor()

该静态工厂方法的其特点是:

  • 线程数目为 1
  • 工作队列是无界的:因此如果一直提交任务,容易将内存沾满,使系统崩溃,(默认是什么队列??)
  • 任务顺序执行:

4.2 newCachedThreadPool()

特点如下:

  • 适用于处理大量短时间工作任务
  • 通过缓存线程来重用,线程长时间闲置时,不会消耗什么资源
  • 使用synchronousQueue作为工作队列

4.3 newFixedThreadPool(int nThreads)

其特点是:

  • 重用指定数目nThreads的线程,线程池中任何时候都有nThreads个线程;当有线程退出,则会创建新线程,以补充到指定数据nThreads。
  • 使用无界工作队列:因此如果一直提交任务,容易将内存沾满,使系统崩溃,(默认是什么队列??)

4.4 newSingleThreadScheduledExecutor() 和 newScheduleThreadPool(int corePoolSize)

内部会创建ScheduledExecutorService,可进行定时的工作调度,前者是一个线程,后者是多个线程

4.5 newWorkStrealingPool(int parallelism)

java 8引进的方法,内部构件ForkJoinPool利用work-strealing算法并行处理任务,不保证执行顺序

4.6 ThreadPoolExecutor

最进基本的线程池创建方法,前面的1-3都是对ThreadPoolExecutor的封装。

 

5. ThreadPollExecutor 构造方法介绍

使用该构造方法创建线程池,构造方法有7个参数

参考这里

 

 

 


6. 参考资料

(1)https://www.cnblogs.com/i-code/p/13917733.html

(2)https://mp.weixin.qq.com/s?__biz=MzAxMjYyMTYxMQ==&mid=2453156229&idx=1&sn=592d1a57854439d504e62aa41a1733a1&chksm=8c6393c1bb141ad70b12aaaa7ad40ac6b263cc54fed0a771567c785bc4f88f5edb36cb36497d&scene=178&cur_album_id=1528417970434162690#rd

你可能感兴趣的:(Java,Java并发编程,线程池,ThreadPool,Executor)