我想管理我的 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() 时,只有一部分并发线程返回“真”。
removeFutures() 中的断言为每个被删除的未来返回 true(我也检查了 isDone() 和 isCompleted()。
被中断的线程数是随机的。超过 15 个正在运行的线程,有时 13 个被中断,有时 2 个 .. .
我真的不明白问题出在哪里.如果我调用future.cancel(true)并且返回true...然后我检查Thread.interrupted(仅调用一次),我希望它也返回true .
知道我错过了什么吗?
我正在构建 java 1.6.0_02-b05