2017-01-28 1 views
0

Исполнитель услуг имеет следующий метод -Есть ли UseCase для использования попасть на объект будущего, полученный от вызова представить работоспособных экземпляра исполнителя службы

Future<?> submit(Runnable task); 

Теперь Runnable в отличие от Callabe ничего не возвращает (ее тип возвращаемого значения является недействительным). Поэтому вызов get on future object дает мне null для представленной задачи Runnable.

ExecutorService service = null; 
    try { 
    service = Executors.newSingleThreadExecutor(); 
    Future<?> result = service.submit(() -> System.out.println("My 1st ThreadId : " + Thread.currentThread().getId())); 
    System.out.println(result.get()); 
    } finally { 
    if(service != null) service.shutdown(); 
    } 

дает

My 1st ThreadId : 10 
null 

Это, вероятно, будет блокирующий вызов, прежде чем она возвращает нулевое значение, если Runnable задача не закончена. Удивление, если есть практическая возможность использования get на будущий объект, возвращенный вызовом submit to executor service для выполняемой задачи.

ответ

2

Самый большой вариант использования - просто ждать завершения задачи. Обычно делаются, если вы хотите выпустить несколько вещей параллельно и дождаться их завершения.

0

Вызов Future.get() имеет смысл, если вы хотите убедиться, что Runnable выполнен успешно, без каких-либо исключений. Если, однако, произошло исключение, get() также выбрасывает (другое) исключение.

Смежные вопросы