【教程】如何使用ScheduledExecutorService?

2021-03-18    分类: 网站建设

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);
    
    long initialDelay = 1;
    long period = 1;
    // 从现在开始1秒钟之后,每隔1秒钟执行一次job1
    service.scheduleAtFixedRate(new MyScheduledExecutor("job1"), initialDelay, period, TimeUnit.SECONDS);
    
    // 从现在开始2秒钟之后,每隔2秒钟执行一次job2
    service.scheduleWithFixedDelay(new MyScheduledExecutor("job2"), initialDelay, period, TimeUnit.SECONDS);
  }

ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWithFixedDelay。ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay, initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可见,ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。

 

本文题目:【教程】如何使用ScheduledExecutorService?
网页路径:https://www.cdcxhl.com/news31/105381.html

成都网站建设公司_创新互联,为您提供虚拟主机网站设计公司品牌网站制作网站制作微信小程序网站导航

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站建设