ScheduledExecutorService

 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。

schedule 方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务对象。scheduleAtFixedRate  scheduleWithFixedDelay 方法创建并执行某些在取消前一直定期运行的任务。

用 Executor.execute(java.lang.Runnable) 和 ExecutorService 的 submit 方法所提交的命令,通过所请求的 0 延迟进行安排。schedule 方法中允许出现 0 和负数延迟(但不是周期),并将这些视为一种立即执行的请求。

所有的 schedule 方法都接受相对 延迟和周期作为参数,而不是绝对的时间或日期。将以 Date 所表示的绝对时间转换成要求的形式很容易。例如,要安排在某个以后的Date 运行,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。但是要注意,由于网络时间同步协议、时钟漂移或其他因素的存在,因此相对延迟的期满日期不必与启用任务的当前 Date 相符。 Executors 类为此包中所提供的 ScheduledExecutorService 实现提供了便捷的工厂方法。

 
 
1.ScheduledFuture<?> schedule(Runnable command,
                            long delay,
                            TimeUnit unit)
创建并执行在给定延迟后启用的一次性操作。
参数:
command  - 要执行的任务
delay  - 从现在开始延迟执行的时间
unit  - 延迟参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其   get()  方法在完成后将返回   null
抛出:
RejectedExecutionException  - 如果无法安排执行该任务
NullPointerException  - 如果 command 为 null

 

2.<V> ScheduledFuture<V> schedule(Callable<V> callable,
                                long delay,
                                TimeUnit unit)
创建并执行在给定延迟后启用的 ScheduledFuture。
参数:
callable  - 要执行的功能
delay  - 从现在开始延迟执行的时间
unit  - 延迟参数的时间单位
返回:
可用于提取结果或取消的 ScheduledFuture
抛出:
RejectedExecutionException  - 如果无法安排执行该任务
NullPointerException  - 如果 callable 为 null

3.ScheduledFuture<?> scheduleAtFixedRate(Runnable command,

                                       long initialDelay,
                                       long period,
                                       TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在   initialDelay  后开始执行,然后在   initialDelay+period  后执行,接着在 initialDelay + 2 * period  后执行,依此类推。如果任务的任何一个执行遇到异常,则后续执行都会被取消。否则,只能通过执行程序的取消或终止方法来终止该任务。如果此任务的任何一个执行要花费比其周期更长的时间,则将推迟后续执行,但不会同时执行。
参数:
command  - 要执行的任务
initialDelay  - 首次执行的延迟时间
period  - 连续执行之间的周期
unit  - initialDelay 和 period 参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其   get()  方法在取消后将抛出异常
抛出:
RejectedExecutionException  - 如果无法安排执行该任务
NullPointerException  - 如果 command 为 null
IllegalArgumentException  - 如果 period 小于等于 0

4.ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,

                                          long initialDelay,
                                          long delay,
                                          TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
参数:
command  - 要执行的任务
initialDelay  - 首次执行的延迟时间
delay  - 一次执行终止和下一次执行开始之间的延迟
unit  - initialDelay 和 delay 参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其   get()  方法在取消后将抛出异常
抛出:
RejectedExecutionException  - 如果无法安排执行该任务
NullPointerException  - 如果 command 为 null。
IllegalArgumentException  - 如果 delay 小于等于 0
例子:
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
 public static void main(String[] args) {
  Timer time = new Timer();
 
  ScheduledTest test = new ScheduledTest();
  test.beepForAnHour();
 }
 public void beepForAnHour() {
  final Runnable beeper = new Runnable() {
   public void run() {
    System.out.println("beep");
   }
  };
  final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
    beeper, 0, 1, TimeUnit.SECONDS);
  scheduler.schedule(new Runnable() {
   public void run() {
    try {
   
    beeperHandle.cancel(true);
    beeperHandle.wait(1);
    System.out.println("==============");
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }, 6, TimeUnit.SECONDS);
 
 
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值