TaskExecutor によって返される Futures オブジェクトのリストを管理したいと考えています。
私はこのようなものを持っています
List<Future<String>> list
void process(ProcessThis processThis) {
for ( ...) {
Future<String> future = taskExecutor.submit(processThis);
list.add(future)
}
}
void removeFutures() {
for(Future future : list) {
assert future.cancel(true);
}
ProcessThis は Callable< String> を実装し、Thread.interrupted() ステータスをチェックするタスクです。
public String call() {
while (true) {
if (Thread.interrupted()) {
break;
}
doSomething();
}
}
ここでの問題は、Thread.interrupted() が呼び出されたときに、並行スレッドのサブセットのみが「true」を返すことです。
removeFutures() の assert は、削除されるすべてのフューチャに対して true を返します (isDone() と isCompleted() もチェックしました。
中断されるスレッドの数はランダムです。実行中のスレッドが 15 を超えると、13 が中断されることもあれば、2 .. .
どこに問題があるのか本当にわかりません. future.cancel(true) を呼び出して true が返された場合...そして Thread.interrupted をチェックすると (これは 1 回だけ呼び出されます)、これも true を返すと予想されます
何が欠けているのか分かりませんか?私
はビルド Java 1.6.0_02-b05 を使用しています