并发包下的线程池技术虽然常用,但是知识点较多易忘。所以,参考网络资源做了一个小结,便于复习。

1.Executor接口
用于执行已提交的Runnable任务。

Paste_Image.png

2.ExecutorService接口
继承自Executor接口。

Paste_Image.png

3.ScheduledExecutorService接口
继承自ExecutorService接口,在给定的延迟后执行任务或定时执行任务,类图如下。

Paste_Image.png
Paste_Image.png

4.RejectedExecutionHandler接口
当Executor已经关闭或任务队列已经饱和时,提交新任务时,Executor对应的处理策略。

Paste_Image.png

5.RejectedExecutionHandler接口实现类
RejectedExecutionHandler接口4个实现类对应4种处理策略:

Paste_Image.png

6.BlockingQueue接口
BlockingQueue接口定义任务队列。

Paste_Image.png

7.ArrayBlockingQueue类
实现了BlockingQueue接口。一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。类图如下图所示。

Paste_Image.png
Paste_Image.png
Paste_Image.png

8.Executors类
为ExecutorService、ScheduledExecutorService、ThreadFactory和Callable提供了便捷的工厂方法。
此类支持以下各种方法:

* 创建并返回设置有常用配置字符串的 ExecutorService 的方法。
* 创建并返回设置有常用配置字符串的 ScheduledExecutorService 的方法。
* 创建并返回“包装的”ExecutorService 方法,它通过使特定于实现的方法不可访问来禁用重新配置。
* 创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。
* 创建并返回非闭包形式的 Callable 的方法,这样可将其用于需要 Callable 的执行方法中。
复制代码
Paste_Image.png

9.ThreadPoolExecutor类
类图如下图所示。

Paste_Image.png

ThreadPoolExecutor使用Executors工厂方法Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和 Executors.newSingleThreadExecutor()(单个后台线程)配置的线程池执行每个提交的任务。

Paste_Image.png

使用构造方法可以创建一个自定义的线程池。ThreadPoolExecutor将根据corePoolSize和maximumPoolSize设置的边界自动调整池大小。当新任务在方法execute(java.lang.Runnable) 中提交时,如果运行的线程少于corePoolSize,则创建新线程来处理请求,即使其他辅助线程是空闲的。如果运行的线程多于corePoolSize而少于 maximumPoolSize,则仅当队列满时才创建新线程。如果设置的corePoolSize和maximumPoolSize相同,则创建了固定大小的线程池。如果将 maximumPoolSize 设置为基本的无界值(如Integer.MAX_VALUE),则允许池适应任意数量的并发任务。在大多数情况下,核心和最大池大小仅基于构造来设置,不过也可以使用setCorePoolSize(int)和 setMaximumPoolSize(int)进行动态更改。所有BlockingQueue都可用于传输和保持提交的任务。可以使用此队列与池大小进行交互:

* 如果运行的线程少于corePoolSize,则Executor始终首选添加新的线程,而不进行排队。
* 如果运行的线程等于或多于corePoolSize,则Executor始终首选将请求加入队列,而不添加新的线程。
* 如果无法将请求加入队列,则创建新的线程,除非创建此线程超出maximumPoolSize,在这种情况下,任务将被拒绝。
复制代码

10.ScheduledThreadPoolExecutor类
实现了ScheduledExecutorService接口,在给定的延迟后执行任务,或者定时执行任务,按照提交的先进先出(FIFO)顺序来启用那些被安排在同一执行时间的任务。类图如下所示。

Paste_Image.png

虽然此类继承自ThreadPoolExecutor,但是几个继承的调整方法对此类并无作用。特别是,因为它作为一个使用corePoolSize 线程和一个无界队列的固定大小的池,所以调整maximumPoolSize没有什么效果。

Paste_Image.png

concurrent包下线程池类小结相关推荐

  1. java 线程池 包_Java并发包下线程池类小结

    并发包下的线程池技术虽然常用,但是知识点较多易忘.所以,参考网络资源做了一个小结,便于复习. 1.Executor接口 用于执行已提交的Runnable任务. Paste_Image.png 2.Ex ...

  2. java.util.concurrent包(2)——线程池

    一.概述java.util.concurrent中有非常方便的线程池实现,提供的Executor框架包含用于管理实现Runnable任务,Executors类提供了许多不同类型的Executor实现的 ...

  3. java.util.concurrent 包下面的所有类

    java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...

  4. Android系统,动态找出一个包下所有的类

    最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...

  5. java 重启线程_java 可重启线程及线程池类的设计(详解)

    了解JAVA多线程编程的人都知道,要产生一个线程有两种方法,一是类直接继承Thread类并实现其run()方法:二是类实现Runnable接口并实现其run()方法,然后新建一个以该类为构造方法参数的 ...

  6. 自定义线程池-线程池类和测试类编写

    package com.leon.demo01;import java.util.Collections; import java.util.LinkedList; import java.util. ...

  7. python线程池模块第三方包_python线程池(threadpool)模块使用笔记详解

    最近在做一个视频设备管理的项目,设备包括(摄像机,DVR,NVR等),包括设备信息补全,设备状态推送,设备流地址推送等,如果同时导入的设备数量较多,如果使用单线程进行设备检测,那么由于设备数量较多,会 ...

  8. linux下线程池实现

    linux下线程池实现 转自:http://blog.csdn.net/lmh12506/article/details/7753952 前段时间在github上开了个库,准备实现自己的线程池的,因为 ...

  9. 为什么用线程池?解释下线程池参数?线程池处理流程?阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理?

    为什么用线程池?解释下线程池参数? 1.降低资源消耗:提高线程利用率,降低创建和销毁线程的消耗. 2.提高响应速度:任务来了,直接有线程可用可执行,而不是先创建线程,再执行. 3.提高线程的可管理性: ...

最新文章

  1. 剑指offer:不用加减乘除做加法
  2. 用于特征选择的F-Score打分及其Python实现
  3. qstring转string
  4. SQLServer · 特性分析 · SQL Server 2012的分析函数未必都理解透了(2)
  5. Exadata使用EXAchk进行健康检查
  6. 内存超频时序怎么调_超频讲解:内存时序设置说明一
  7. 深入理解FIFO(包含有FIFO深度的解释)
  8. Linux服务器 mysql5.7安装流程
  9. Spring Boot2 系列教程(三十三)整合 Spring Security
  10. SHIMANO各个等级配件的区别
  11. 计算机 不识u盘,电脑不认u盘了怎么办?
  12. 【已解决】平板作为外接显示屏-Duet
  13. SOLIDWORKS 2014官方正版功能介绍
  14. Android简单的布局优化
  15. censo7安装mysql_centos7环境下在线安装mysql
  16. 企鹅杏仁集团完成2.5亿美元融资,投后估值超过10亿美元...
  17. 微原实验三 基本IO口扩展
  18. 乔布斯现身布道iPad 2 中国渠道商降价清库存
  19. Python:奇数之和
  20. 外观检测可以检测产品的哪些项目?

热门文章

  1. 计算机网络(韩立刚网课笔记)
  2. 10分钟学会数据库压力测试
  3. invoke 魔术_PHP常用魔术方法(__invoke魔术方法)
  4. php最新版本6,PHP实用函数6
  5. install opencv 4.1.1 from source on windows,在其他项目中用cmake去引用
  6. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
  7. 基于卷积神经网络的大豆病害识别
  8. 田间小麦病害自动诊断系统(野外复杂环境)
  9. git 回滚到某个commit_Git 整理 v1.0 | Git 操作整理进阶篇
  10. 百度开源的依存句法分析系统