java.util.concurrent public interface ScheduledExecutorService
extends ExecutorService

一个ExecutorService可以安排命令在给定的延迟后运行,或者定期执行。
schedule方法创建具有各种延迟的任务并返回一个可用于取消或检查执行的任务对象。 scheduleAtFixedRate和scheduleWithFixedDelay方法创建并执行定期运行直到取消的任务。
使用Executor.execute(Runnable)和ExecutorService submit方法提交的命令被安排为请求延迟为零。在schedule方法中也允许零延迟和负延迟(但不是周期),并被视为立即执行的请求。
所有schedule方法都接受相对延迟和周期作为参数,而不是绝对时间或日期。将表示为java.util.Date的绝对时间转换为所需形式是一件简单的事情。例如,要安排在某个未来的date ,您可以使用: schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS) 。但是请注意,由于网络时间同步协议、时钟漂移或其他因素,相对延迟的到期不必与启用任务的当前Date一致。
Executors类为此包中提供的 ScheduledExecutorService 实现提供了方便的工厂方法。
使用示例
这是一个类,其方法将 ScheduledExecutorService 设置为每隔十秒发出哔声,持续一小时:

 import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
   private final ScheduledExecutorService scheduler =
     Executors.newScheduledThreadPool(1);

   public void beepForAnHour() {
     final Runnable beeper = new Runnable() {
       public void run() { System.out.println("beep"); }
     };
     final ScheduledFuture<?> beeperHandle =
       scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
     scheduler.schedule(new Runnable() {
       public void run() { beeperHandle.cancel(true); }
     }, 60 * 60, SECONDS);
   }
 }

关注我的公众号SpaceObj 领取idea系列激活码

posted on 2023-05-10 18:27  张伯灵  阅读(96)  评论(0)    收藏  举报