ScheduledExecutorService的用法
2017-02-10 13:10
399 查看
一、ScheduledExecutorService 设计思想
ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。
1、线程任务
2、定时任务
service.scheduleWithFixedDelay(new MyScheduledExecutor("job2"), initialDelay, period, TimeUnit.SECONDS); }
TimeUnit 单位
MICROSECONDS 微秒 一百万分之一秒(就是毫秒/1000)
MILLISECONDS 毫秒 千分之一秒
NANOSECONDS 毫微秒 十亿分之一秒(就是微秒/1000)
SECONDS 秒
MINUTES 分钟
HOURS 小时
DAYS 天
ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWit
90d8
hFixedDelay。ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay,
initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可见,ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。
一、ScheduledExecutorService 设计思想
ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。
1、线程任务
class MyScheduledExecutor implements Runnable { private String jobName; MyScheduledExecutor() { } MyScheduledExecutor(String jobName) { this.jobName = jobName; } @Override public void run() { System.out.println(jobName + " is running"); } }
2、定时任务
public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(10); //定义10个线程空间 long initialDelay = 1; long period = 1; // 从现在开始1秒钟之后,每隔1秒钟执行一次job1 service.scheduleAtFixedRate(new MyScheduledExecutor("job1"), initialDelay, period, TimeUnit.SECONDS); // 从现在开始2秒钟之后,每隔2秒钟执行一次job2
// MyScheduledExecutor实现Runnable接口的类,会自动运行里面的run()方法,initialDelay的意思就是启动等待时间,periods是两次开始执行最小 //间隔时间,unit:计时单位
service.scheduleWithFixedDelay(new MyScheduledExecutor("job2"), initialDelay, period, TimeUnit.SECONDS); }
TimeUnit 单位
MICROSECONDS 微秒 一百万分之一秒(就是毫秒/1000)
MILLISECONDS 毫秒 千分之一秒
NANOSECONDS 毫微秒 十亿分之一秒(就是微秒/1000)
SECONDS 秒
MINUTES 分钟
HOURS 小时
DAYS 天
ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWit
90d8
hFixedDelay。ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay,
initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可见,ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。
相关文章推荐
- ScheduledExecutorService用法
- ScheduledExecutorService 定时器用法
- ScheduledExecutorService的用法——定时执行两个任务
- ScheduledExecutorService的用法
- ExecutorCompletionService用法示例
- 任务调度的 Java 实现方法一:Timer、TimerTask、 ScheduledExecutorService
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService 的 scheduleAtFixedRate 和 scheduleWithFixedDelay 两个方法的区别
- ExecutorService线程池的用法
- 使用ScheduledExecutorService周期性的定时任务
- 使用 ScheduledExecutorService 来替换 Timer
- Timer与ScheduledExecutorService 的使用和区别
- 定时任务实现Timer, TimeTask, ScheduledExecutorService及Spring定时器
- java定时任务接口ScheduledExecutorService
- ScheduledExecutorService定时周期执行指定的任务
- ScheduledExecutorService执行周期任务
- 关于ExecutorService 的用法
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
- Java 并发专题 : Timer的缺陷 用ScheduledExecutorService替代
- ScheduledExecutorService遇到异常后续任务不继续执行的问题