Искам да управлявам списък с Futures обекти, върнати от моя TaskExecutor.
Имам нещо подобно
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.
Някаква идея какво пропускам?
Аз съм на build java 1.6.0_02-b05