简介

CachedThreadPool是一个根据需要创建线程的线程池。

创建方法

public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());}

corePoolSize = 0,maximumPoolSize设置为Integer.MAX_VALUE,代表没有核心线程非核心线程是无界的;keepAliveTime = 60L,空闲线程等待新任务的最长时间是60s;用了阻塞队列SynchronousQueue,是一个不存储元素的阻塞队列,每一个插入操作必须等待另一个线程的移除操作,同理一个移除操作也得等待另一个线程的插入操作完成;

execute方法执行


执行execute方法时,首先会先执行SynchronousQueue的offer方法提交任务,并查询线程池中是否有空闲线程来执行SynchronousQueue的poll方法来移除任务。如果有,则配对成功,将任务交给这个空闲线程。否则,配对失败,创建新的线程去处理任务;当线程池中的线程空闲时,会执行SynchronousQueue的poll方法等待执行SynchronousQueue中新提交的任务。若超过60s依然没有任务提交到SynchronousQueue,这个空闲线程就会终止;因为maximumPoolSize是无界的,所以提交任务的速度 > 线程池中线程处理任务的速度就要不断创建新线程;每次提交任务,都会立即有线程去处理,因此CachedThreadPool适用于处理大量、耗时少的任务。

线程池之CachedThreadPool学习相关推荐

  1. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  2. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  3. Java线程池 - 问题驱动学习

    Java线程池 本章内容: 1.问题驱动"Java线程池"学习 2.线程池的功能需求 3.实现Thread Pool模式 4.JUC Executors源码分析

  4. java定长池,java线程池源码学习

    使用Executors创建线程池 Executor是一个工厂类,可以直接创建线程池,从最简单的定长线程池开始学习 public static ExecutorService newFixedThrea ...

  5. 线程池之ScheduledThreadPool学习

    简介 ScheduledThreadPool是一个能实现定时.周期性任务的线程池. 创建方法 public static ScheduledExecutorService newScheduledTh ...

  6. 线程池之SingleThreadPool学习

    简介 SingleThreadPool是使用单个工作线程的线程池. 创建方法 public static ExecutorService newSingleThreadExecutor() {retu ...

  7. 线程池之FixedThreadPool学习

    简介 FixedThreadPool是可重用固定线程数的线程池. 创建方法 public static ExecutorService newFixedThreadPool(int nThreads) ...

  8. java线程池的使用学习

    目录 1. 线程池的创建 2. 线程池的运行规则 3. 线程池的关闭 4. 线程池的使用场合 5. 线程池大小的设置 6 实现举例 1. 线程池的创建 线程池的创建使用ThreadPoolExecut ...

  9. java线程池 synchronized_java多线程学习(二) 之 synchronized

    在实现线程同步方法里,synchronized是java中最简单的方法. 官方解释: The use of synchronized methods or statements provides ac ...

最新文章

  1. 第一个structs+spring+hibernate的web程序
  2. C# 设置当前程序调用的dll文件以及其他文件的寻址路径
  3. Xcode可删除文件列表
  4. 优秀的基于VUE移动端UI框架合集
  5. 警告: Can't find the request for http://localhost:8080/ibatisSpringDemo/ws/testWS's Observer
  6. 数据分析师—Excel实战篇
  7. 取色器实战(Qt含源码)
  8. 单独计算机械台班费套什么定额,机械台班费用定额
  9. 用 js判断 一个数是否是素数(质数)_Javascript 判断一个数是不是素数
  10. 2020徐涛背诵笔记电子版pdf_2021徐涛冲刺背诵笔记电子版-2021徐涛冲刺背诵笔记pdf免费版下载_东坡手机下载...
  11. 黑猴子的家:SVN 服务端创建资料库
  12. windows 搭建Web服务器和连接局域网打印机
  13. 3.计蒜客ACM题库.A1597 结果填空:年龄
  14. Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
  15. Aqara? 华为?智汀?要真的实现万物互联了吗?
  16. QEMU 网络配置一把梭
  17. 自定义模型tensorboard画图命令报错 assert error assert isinstance(orig, torch.nn.Module)
  18. ARM服务器搭载的操作系统
  19. Markdown - Emoji表情大全
  20. 学习Linux有哪些工作方向?

热门文章

  1. MultipartFile(文件的上传)--CommonsMultipartResolver
  2. Theano - Numpy 新手
  3. react-router的基础知识
  4. android系统各个输出log对应层次文件
  5. GC之二--GC是如何回收时的判断依据、shallow(浅) size、retained(保留) size、Deep(深)size...
  6. UVa 10148 - Advertisement
  7. 什么是HTTP Headers?
  8. 【原创·教程·连载】Microsoft SQL Server 2008 Reporting Services应用系列(一)安装篇...
  9. [分享]2007年创业给我们的提示
  10. TCP连接的建立和终止