java - 如果满足条件,如何安排定期任务但停止并返回结果(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);
}
}
解决方案
在您的run
方法中,如果满足条件,则调用scheduler.shutdown()
. 那应该完全符合您的要求。
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() {
System.out.println("beep");
if(isMyCondition() {
scheduler.shutdown();
}
}
};
推荐阅读
- spring-boot - CSV 文件上传 - 包含超过百万条记录
- java - 在tomcat server.xml中,是否可以为服务元素定义AccessLogValve
- python - Python 3 REGEX .finditer:“callable_iterator object at 0x ...”中十六进制地址的用处?
- c++ - cmd 关闭但未完成 C++ 中的过程
- python - floweaver 和 matplotlib 之间是否有集成以将 sankey 图绘制到斧头上?
- microsoft-graph-api - Office365 - 获取所有 Planner 计划的列表
- javascript - 如何做到这一点,当一个对象被调用而不调用它的任何属性时,它返回一个默认值
- javascript - 在新日期 vue.js 中获取 2 个不同日期之间的所有日期
- azure - 我可以在我保留的 VM 上托管 Azure 应用服务吗?
- swift - SwiftUI 配置 LazyVGrid 无间距