我想管理由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);
}
Run Code Online (Sandbox Code Playgroud)
ProcessThis是一个实现Callable <String>并检查Thread.interrupted()状态的任务
public String call() {
while (true) {
if (Thread.interrupted()) {
break;
}
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当调用Thread.interrupted()时,只有并发线程的子集返回'true'.
removeFutures()中的断言为每个被删除的未来返回true(我也检查了isDone()和isCompleted().
被中断的线程数是随机的.超过15个运行线程有时13个被中断,有时2个... .
我真的不明白的地方是个问题.如果我叫future.cancel(真),并返回true ...然后我检查Thread.interrupted(这被称为只有一次),我希望这回也是如此.
我错过了什么你知道吗?
我在构建Java 1.6.0_02-B05