ScheduledExecutor服务接口


java.util.concurrent.ScheduledExecutorService 接口是 ExecutorService 接口的子接口,支持未来和/或定期执行任务。

ScheduledExecutorService 方法

先生。 方法及说明
1

<V> ScheduledFuture<V> 调度(Callable<V> 可调用,长延时,TimeUnit 单位)

创建并执行在给定延迟后启用的 ScheduledFuture。

2

ScheduledFuture<?> 时间表(可运行命令,长延迟,TimeUnit 单位)

创建并执行在给定延迟后启用的一次性操作。

3

ScheduledFuture<?>scheduleAtFixedRate(可运行命令,长initialDelay,长周期,TimeUnit单位)

创建并执行一个周期性操作,该操作首先在给定的初始延迟后启用,然后在给定的时间段内启用;也就是说,执行将在initialDelay之后开始,然后是initialDelay+period,然后是initialDelay + 2 * period,依此类推。

4

ScheduledFuture<?>scheduleWithFixedDelay(可运行命令,长初始延迟,长延迟,TimeUnit单位)

创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,然后在一次执行终止和下一次执行开始之间具有给定的延迟。

例子

以下 TestThread 程序显示了 ScheduledExecutorService 接口在基于线程的环境中的用法。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

这将产生以下结果。

输出

beep
beep
beep
beep