【问题标题】:Reschedule the task using ManagedScheduledExecutorService使用 ManagedScheduledExecutorService 重新安排任务
【发布时间】:2016-06-17 05:38:18
【问题描述】:

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

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

用户会安排多个任务,例如:

  1. user1 安排了一个任务,该任务将在每天晚上 9 点触发。
  2. user2 安排了一个任务,该任务将在每天晚上 10 点触发。
  3. user3 安排了一个任务,该任务将在下午 4 点隔天触发

user2 想要重新安排一个任务,使其在每天上午 10 点运行。现在我想取消上一个任务并创建一个新任务。将ScheduledFuture 引用存储在内存中不起作用,因为我们使用的是集群环境。我无法将ScheduledFuture 的引用存储在数据库中,因为scheduledFuture 未序列化。

我如何存储scheduledFuture 引用或者有什么方法可以重新安排任务?

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

【问题讨论】:

  • 你有没有尝试过?

标签: java scheduled-tasks scheduler


【解决方案1】:

假设你有一个方法 时间表

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

triggerimpl 定义在晚上 10 点调度任务

你可以把 Reschedule 方法写成

**重新安排 **

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 定义时间表 @ 10AM

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 2010-10-12
    • 2013-12-13
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多