さて、私は時間をかけて周りを見回しましたが、明確な解決策を見つけることができませんでした. 以前に別の質問を投稿しましたが、それは少し異なる問題です。
問題: 定期的に発生する条件をポーリングしたい。その条件がまだ false の場合は、再度スケジュールを変更します。true の場合、スケジューリングを停止します。しかし、私はまた、決定的な時間だけ待ちたいと思っています。これが私が書いたものです
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 秒だけ待ってからタスクの実行を停止するにはどうすればよいですか?