ScheduledExecutorServiceで実行しているときに、タスク自体の内部からタスクの繰り返しを停止するための優れた方法はありますか?
たとえば、次のタスクがあります。
Future<?> f = scheduledExecutor.scheduleAtFixedRate(new Runnable() {
int count = 0;
public void run() {
System.out.println(count++);
if (count == 10) {
// ??? cancel self
}
}
}, 1, 1, TimeUnit.SECONDS);
外部からはf.cancel()で簡単にキャンセルできますが、指定した場所で繰り返しを止めるにはどうすればよいですか?(AtomicReferenceを介してFutureを渡すことは安全ではありません。これは、scheduleAtFixedRateがf lateを返し、変数もlateに設定され、タスク自体がすでに実行されている可能性があり、参照にnullが含まれている可能性があるためです。)