Проблема отмены при использовании вложенного будущего на Java - PullRequest
0 голосов
/ 06 февраля 2019

Если 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);           
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...