ScheduledThreadPoolExecutor类并不是什么新出的功能了,在JDK1.5的时候就已经加入进来,开发他的正式并发大神Doug Lea。大概三四年前有整体学习过Java并发的源码。这次在给公司做分布式心跳检测系统的时候,花了点时间重新读了一遍。我很庆幸自己这么做了,虽然并不是完整的读完了,但是真的受益良多。
首先看下ScheduledThreadPoolExecutor的类图:
类图并不复杂,Executor接口定义了execute方法执行Runnable的任务。
ExecutorService在他的基础上扩展了任务停止(shutdown, shutdownNow),状态判断(isShutdown, isTerminated, awaitTermination),任务提交(submit)和批量任务提交(invokeAll, invokeAny)。
ScheduledExecutorService接口则定义了我们一般常用的方法任务延迟执行(schedule),定时任务(scheduleAtFixedRate, scheduleWithFixedDelay),我重点要说的也就是schedule和scheduleWithFixedDelay。至于scheduleAtFixedRate,和scheduleWithFixedDelay只是在任务重复执行的方式上些许不同,不细表述,可以很容易的查到。
先看个简单的schedule方法使用的例