2015-03-20 2 views
0
  1. Почему нам нужен экземпляр FutureTask, когда мы создаем поток с использованием вызываемого?

2.I мог видеть, что, используя callbale, мы можем получить исключение (если произошло), используя метод futuretask.get(). В этом случае наша основная нить должна ждать завершения потока !. Разве это не разрушит цель души нарезания резьбы? Разве это не недостаток Callable?Не исключение Недостаток интерфейса Callable?

ответ

1
V get() throws InterruptedException,ExecutionException 

Уэйтс в случае необходимости для вычисления для завершения, а затем извлекает свой результат.

Теперь

Почему, что нам нужен экземпляр FutureTask, когда мы делаем нить с помощью вызываемой?

Если вам нужен результат отозваны, то вы должны использовать его

наш Основной поток должен ждать, пока поток завершен!

Да так до тех пор, пока вы действительно не нужен результат, вы должны избегать использования его

Вы также можете использовать overloaded version Так что ждать не будет не infinite, и вы получите тайм-аута Exception как только wait() истекло

0

ответы:

  1. Вам не нужно FutureTask, вы можете передать Callable в ExecutorService.submit().
  2. Метод get() предназначен для блокировки, и это не проблема. Идея заключается в том, чтобы выполнить функции в фоновом режиме и то время вы можете выполнить другой код, вы можете передать FutureTask к какому-либо другому способу, и т.д.
  3. Это важно, что Callable.call() бросает Exception. Если вы посмотрите на «стандартный» Runnable, он не выбрасывает исключение с проверкой, поэтому в случае обработки ошибок вы должны поместить логику обработки исключений в run() только для компиляции вашей программы.
Смежные вопросы