運行任務本身內停止週期性任務是否有一個很好的方式在ScheduledExecutorService的運行時,從任務本身停止任務的重複?從一個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傳遞未來是不安全的,因爲當scheduleAtFixedRate返回f late並且變量設置得太晚,並且任務本身可能已經運行時,可能會看到參考中的空值)。
爲什麼不拋出StopIteration異常,您可以通過它從外部刪除執行程序的調用?據我所知,Callable's不知道他們加入的任何執行者。 – Tim 2011-02-05 21:46:01
最簡單和相當醜陋的方式是拋出異常:) – bestsss 2011-02-06 00:05:06