线程池之CachedThreadPool学习
简介
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学习相关推荐
- Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...
Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...
- Java线程池详解学习:ThreadPoolExecutor
Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...
- Java线程池 - 问题驱动学习
Java线程池 本章内容: 1.问题驱动"Java线程池"学习 2.线程池的功能需求 3.实现Thread Pool模式 4.JUC Executors源码分析
- java定长池,java线程池源码学习
使用Executors创建线程池 Executor是一个工厂类,可以直接创建线程池,从最简单的定长线程池开始学习 public static ExecutorService newFixedThrea ...
- 线程池之ScheduledThreadPool学习
简介 ScheduledThreadPool是一个能实现定时.周期性任务的线程池. 创建方法 public static ScheduledExecutorService newScheduledTh ...
- 线程池之SingleThreadPool学习
简介 SingleThreadPool是使用单个工作线程的线程池. 创建方法 public static ExecutorService newSingleThreadExecutor() {retu ...
- 线程池之FixedThreadPool学习
简介 FixedThreadPool是可重用固定线程数的线程池. 创建方法 public static ExecutorService newFixedThreadPool(int nThreads) ...
- java线程池的使用学习
目录 1. 线程池的创建 2. 线程池的运行规则 3. 线程池的关闭 4. 线程池的使用场合 5. 线程池大小的设置 6 实现举例 1. 线程池的创建 线程池的创建使用ThreadPoolExecut ...
- java线程池 synchronized_java多线程学习(二) 之 synchronized
在实现线程同步方法里,synchronized是java中最简单的方法. 官方解释: The use of synchronized methods or statements provides ac ...
最新文章
- 第一个structs+spring+hibernate的web程序
- C# 设置当前程序调用的dll文件以及其他文件的寻址路径
- Xcode可删除文件列表
- 优秀的基于VUE移动端UI框架合集
- 警告: Can't find the request for http://localhost:8080/ibatisSpringDemo/ws/testWS's Observer
- 数据分析师—Excel实战篇
- 取色器实战(Qt含源码)
- 单独计算机械台班费套什么定额,机械台班费用定额
- 用 js判断 一个数是否是素数(质数)_Javascript 判断一个数是不是素数
- 2020徐涛背诵笔记电子版pdf_2021徐涛冲刺背诵笔记电子版-2021徐涛冲刺背诵笔记pdf免费版下载_东坡手机下载...
- 黑猴子的家:SVN 服务端创建资料库
- windows 搭建Web服务器和连接局域网打印机
- 3.计蒜客ACM题库.A1597 结果填空:年龄
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
- Aqara? 华为?智汀?要真的实现万物互联了吗?
- QEMU 网络配置一把梭
- 自定义模型tensorboard画图命令报错 assert error assert isinstance(orig, torch.nn.Module)
- ARM服务器搭载的操作系统
- Markdown - Emoji表情大全
- 学习Linux有哪些工作方向?
热门文章
- MultipartFile(文件的上传)--CommonsMultipartResolver
- Theano - Numpy 新手
- react-router的基础知识
- android系统各个输出log对应层次文件
- GC之二--GC是如何回收时的判断依据、shallow(浅) size、retained(保留) size、Deep(深)size...
- UVa 10148 - Advertisement
- 什么是HTTP Headers?
- 【原创·教程·连载】Microsoft SQL Server 2008 Reporting Services应用系列(一)安装篇...
- [分享]2007年创业给我们的提示
- TCP连接的建立和终止