好的,所以我花了一些时间环顾四周,但未能找到明确的解决方案。我之前发布了一个单独的问题,但这是一个有点不同的问题。
问题:我想轮询定期发生的情况。如果该条件仍然为假,请再次重新安排。如果为真,则停止调度。但我也只想等待一些确定的时间。这是我写的
final ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
final Future<?> future = service.schedule(new Runnable() {
@Override
public void run() {
if (conditionFalse()) {
System.out.println("its false. Rescheduling");
service.schedule(this, 2, TimeUnit.SECONDS);
} else {
System.out.println("true. Exiting");
}
}
}, 2, TimeUnit.SECONDS);
//Wait only for 5 seconds
future.get(5, TimeUnit.SECONDS); // does not work
//does not work either
service.schedule(new Runnable() {
@Override
public void run() {
future.cancel(true);
}
}, 5, TimeUnit.SECONDS);
这会不断重新安排自己,直到满足条件。关于为什么它不起作用的任何建议?如何只等待 5 秒然后停止任务执行?