Если Future
является вложенным для разных заданий, создается и получает одинаковое время ожидания для обоих Future
, основной Future
не отменяется.Но если тайм-аут для ребенка Future
меньше основного Future
, его можно отменить.
В чем причина этого?
Мой пример:
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Future<Object> main= service.submit(()->{
Future<Object> child= service.submit(()->{
while(!Thread.currentThread().isInterrupted()){
System.out.println("child future is running...");
Thread.sleep(100);
}
return 0;
});
try{
child.get(10,TimeUnit.MILLISECONDS);
}catch(Exception we){
System.out.println("child future cancelled.");
child.cancel(true);
}
while(!Thread.currentThread().isInterrupted()){
System.out.println("main future is running...");
Thread.sleep(100);
}
return 0;
});
try{
main.get(10,TimeUnit.MILLISECONDS);
}catch(Exception we){
System.out.println("main future cancelled.");
main.cancel(true);
}
}