简介

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学习相关推荐

  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. 线程池之SingleThreadPool学习

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

  6. 线程池之CachedThreadPool学习

    简介 CachedThreadPool是一个根据需要创建线程的线程池. 创建方法 public static ExecutorService newCachedThreadPool() {return ...

  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. 服务器插显示器黑的,服务器插显示器不显示
  2. echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
  3. 从「林」开始: imx51-linux-rt3070ap-dhcpd
  4. 安卓 usb音量调节_戴尔推出面向Teams和Zoom视频通话的USB-C免提适配器
  5. (转)linux下vi编辑器编写C语言的配置
  6. Activiti的ProcessEngine的基本配置
  7. Kubernetes 常见运维技巧总结
  8. 【CS224N笔记】一文详解神经网络来龙去脉
  9. CentOS安装QQ2012
  10. sqlite3在Python2.7下对于中文路径的支持
  11. 萌萌机器人布娃娃图片_萌萌机器人教程
  12. 制定自动化测试实施计划
  13. 向日葵控制端怎么传输文件给服务器,传送文件步骤有哪些?如何用向日葵实现远程传送文件?...
  14. VMware9 绿色破解版 下载地址
  15. 从hr口中了解react的状态管理库(mobx, recoil), 立马过来学习之mobx
  16. 360Wonder监控系统,设计和开发经验之谈
  17. A/B/C/D/E五个人互相传球
  18. 嵌套循环中的break和continue使用规则
  19. 武汉地铁站点最短路径搜索的实现(一)——Dijkstra算法(资料收集)
  20. filecoin benchmarks v25 GeForce GTX 1080 Ti

热门文章

  1. Kubernetes初体验
  2. Web测试实践-任务进度-Day02
  3. C#与java可以共用的DES加密解密
  4. 关于智慧城市建设的几点建议
  5. rails3 cookie setting
  6. automapper
  7. PHP7 - MongoDB Driver 使用心得
  8. GitLab 密码重设
  9. python操作excel表格文件--使用xlrd模块
  10. 闭关修炼——two——struts2