首页 > 解决方案 > 如果满足条件,如何安排定期任务但停止并返回结果(Java)

问题描述

1)我需要在一定的超时时间内定期执行某项任务。

2)但取决于任务的结果,我想在超时结束之前停止。此外,我需要参考当前执行的任务,以便有机会询问结果。

1)的解决方案是没有问题的,因为它可以通过如下所示的小代码片段来解决。但我不知道如何整合2)。因此,对于这个代码示例,我希望蜂鸣器对象运行的代码可以有正面或负面的结果,并且基于(例如)正面结果,蜂鸣器任务不应再定期执行。

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);
  }
}

标签: javascheduled-tasksscheduledexecutorserviceperiodic-task

解决方案


在您的run方法中,如果满足条件,则调用scheduler.shutdown(). 那应该完全符合您的要求。

public void beepForAnHour() {
    final Runnable beeper = new Runnable() {
        public void run() { 
          System.out.println("beep"); 
          if(isMyCondition() {
           scheduler.shutdown();
          }
        }
    };

请参阅ExecutorService.shutdown()的 javadoc


推荐阅读