线程池之ScheduledThreadPool学习
简介
ScheduledThreadPool是一个能实现定时、周期性任务的线程池。
创建方法
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {return new ScheduledThreadPoolExecutor(corePoolSize);}
这里创建了ScheduledThreadPoolExecutor,ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,主要用于给定 延时之后的运行任务或定期处理任务。ScheduledThreadPoolExecutor的构造方法如下:
public ScheduledThreadPoolExecutor(int corePoolSize) {super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,new DelayedWorkQueue());}
ScheduledThreadPoolExecutor构造方法中最终调用的是父类ThreadPoolExecutor的构造方法;corePoolSize是传递进来的固定数值,maximumPoolSize的值是Integer.MAX_VALUE;DelayedWorkQueue是无界的,因此maximumPoolSize是无效的。
execute方法执行
当执行ScheduledThreadPoolExecutor的scheduleAtFixedRate或scheduleWithFixedDelay方法,会向DelayedWorkQueue添加一个实现RunnableScheduledFuture接口的任务包装类ScheduledFutureTask,并检查运行的线程是否达到核心线程数corePoolSize。
如果没有就新建线程,并启动。但并非立即执行任务,而是去DelayedWorkQueue中取任务包装类ScheduledFutureTask,然后再去执行任务;
如果运行的线程达到了corePoolSize,就把任务添加到任务队列DelayedWorkQueue中;DelayedWorkQueue会将任务排序,先执行的任务放在队列的前面。
任务执行完后,ScheduledFutureTask中的变量time改为下次要执行的时间,并放回到DelayedWorkQueue中。
线程池之ScheduledThreadPool学习相关推荐
- 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 ...
- 线程池之SingleThreadPool学习
简介 SingleThreadPool是使用单个工作线程的线程池. 创建方法 public static ExecutorService newSingleThreadExecutor() {retu ...
- 线程池之CachedThreadPool学习
简介 CachedThreadPool是一个根据需要创建线程的线程池. 创建方法 public static ExecutorService newCachedThreadPool() {return ...
- 线程池之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 ...
最新文章
- 服务器插显示器黑的,服务器插显示器不显示
- echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
- 从「林」开始: imx51-linux-rt3070ap-dhcpd
- 安卓 usb音量调节_戴尔推出面向Teams和Zoom视频通话的USB-C免提适配器
- (转)linux下vi编辑器编写C语言的配置
- Activiti的ProcessEngine的基本配置
- Kubernetes 常见运维技巧总结
- 【CS224N笔记】一文详解神经网络来龙去脉
- CentOS安装QQ2012
- sqlite3在Python2.7下对于中文路径的支持
- 萌萌机器人布娃娃图片_萌萌机器人教程
- 制定自动化测试实施计划
- 向日葵控制端怎么传输文件给服务器,传送文件步骤有哪些?如何用向日葵实现远程传送文件?...
- VMware9 绿色破解版 下载地址
- 从hr口中了解react的状态管理库(mobx, recoil), 立马过来学习之mobx
- 360Wonder监控系统,设计和开发经验之谈
- A/B/C/D/E五个人互相传球
- 嵌套循环中的break和continue使用规则
- 武汉地铁站点最短路径搜索的实现(一)——Dijkstra算法(资料收集)
- filecoin benchmarks v25 GeForce GTX 1080 Ti