Java定时任务接口ScheduledExecutorService

一、概述

  1. SheduleExecutorService 是JDK 1.5出来的;
  2. SheduleExecutorService 是基于线程池设计的定时任务类,每个调度任务都是会在线程池中分配到一个线程去执行,任务是并行的;
  3. 只有当调度任务运行时,ScheduledExecutorService 才会真正启动一个线程,其余时间ScheduledExecutorService都是处于轮询任务的状态;
  4. 其方法 schedule 是以相对延迟和周期作为参数。

     注意:通过 ScheduledExecutorService 执行的周期任务,如果任务执行过程中抛出了异常,那么 ScheduledExecutorService 就会停止执行任务,且不会周期地执行该任务了。所以想该任务一直被周期执行,那么需要 catch 一切可能的异常。

二、方法

前两方法:是给定延迟后启用的一次性操作。后两方法:是周期性执行操作。

1.以固定频率周期执行任务

ScheduledFuture<?> scheduleAtFixedRate(Runnable command,  
                                      long initialDelay,  
                                      long period,  
                                      TimeUnit unit); 
  • command - 要执行的任务
  • initialDelay - 首次执行的延迟时间
  • period - 连续执行之间的周期
  • unit - initialDelay 和 period 参数的时间单位

2.以固定延迟周期执行任务

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,  
                                         long initialDelay,  
                                         long delay,  
                                         TimeUnit unit);  
  • command - 要执行的任务
  • initialDelay - 首次执行的延迟时间
  • delay - 一次执行终止和下一次执行开始之间的延迟
  • unit - initialDelay 和 delay 参数的时间单位

3.Demo

调度线程任务

public class ScheduledExecutorServiceTest implements Runnable {

    ScheduledExecutorServiceTest() {
    }

    @Override
    public void run() {
        ... //需要执行的任务
        System.out.println("The current time is " +new Date() + ".");
    }
}

3.1 scheduleAtFixedRate

public static void main(String[] args) {
        ScheduledExecutorService seService = Executors.newScheduledThreadPool(2);
        
        // 从现在开始1分钟之后,每隔5分钟执行一次
        service.scheduleAtFixedRate(new ScheduledExecutorServiceTest(), 1, 5, TimeUnit.SECONDS);
    }

3.2 scheduleWithFixedDelay

public static void main(String[] args) {
        ScheduledExecutorService seService = Executors.newScheduledThreadPool(2);
        
        // 从现在开始1分钟之后,每此执行完后隔5分钟再执行一次
        service.scheduleWithFixedDelay(new ScheduledExecutorServiceTest(), 1, 5, TimeUnit.SECONDS);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值