使用ManagedScheduledExecutorService重新安排任务

时间:2016-03-03 18:16:56

标签: java scheduled-tasks scheduler

我需要安排在触发器触发时运行的任务。我使用ManagedScheduledExecutorService来安排任务。

ScheduledFuture<?> schedule(Runnable command,Trigger trigger)

用户将安排多项任务,例如:

  1. user1安排了一项任务,每天晚上9点开火。
  2. user2安排了一项任务,每天晚上10点开火。
  3. user3安排了一项任务,该任务将在下午4点开始隔天
  4. user2想要重新安排每天上午10点运行的任务。现在我想取消上一个任务并创建一个新任务。将ScheduledFuture引用存储在内存中并不起作用,因为我们正在使用群集环境。我无法将ScheduledFuture的引用存储在数据库中,因为scheduledFuture未被序列化。

    如何存储scheduledFuture参考或有没有办法重新安排任务?

    ScheduledFuture future = managedScheduledExecutorService.schedule(task, triggerimpl);
    

1 个答案:

答案 0 :(得分:0)

假设你有一个方法 SCHEDULE

class Scheduler {
 private ScheduledFuture future;
    public void schedule (){
     future = managedScheduledExecutorService.schedule(task, triggerimpl);
    }
   }

triggerimpl定义了晚上10点的计划任务

您可以将重新安排方法写为

**重新开始**

class Scheduler {
 private ScheduledFuture future;
    public void schedule (){
     future = managedScheduledExecutorService.schedule(task, triggerimpl);
    }

     public void reschedule (){
     future.cancel(false);
     future = managedScheduledExecutorService.schedule(task, newtriggerimpl);
    }
   }

newtriggerimpl定义了计划@ 10 AM