У меня возникла проблема с ThreadPoolExecutor
.ThreadPoolExecutor - различия между методами submit и execute?
После написания код, я нашел способ submit()
съест RuntimeException
брошенную программой, но метод execute()
будет повторно бросить RuntimeException`. Я хочу знать причину этого.
Недавно я прочитал исходный код ThreadPoolExecutor
и знаю принцип пула потоков. Теперь я понимаю, как работает метод execute()
, но я не мог понять, как выполняется метод submit()
. Я только знаю, что метод submit()
будет обернуть Runnable
или Callable
в FutureTask
и вызовите execute()
метод:
public Future submit(Runnable runnable)
{
if(runnable == null)
{
throw new NullPointerException();
} else
{
RunnableFuture runnablefuture = newTaskFor(runnable, null);
execute(runnablefuture);
return runnablefuture;
}
}
Итак, моя проблема заключается: как ThreadPoolExecutor
выполнить FutureTask
и почему это RuntimeException
съедено?
хорошее объяснение здесь http://stackoverflow.com/questions/3929342/choose-between-executorservices-submit-and-executorservices-execute – Tala
Я знаю, что метод submit() свяжет исключение с Future, но после прочтения исходного кода ThreadPoolExecutor я не нашел место, где оно было? Итак, я хочу знать, как метод submit() связывает исключение с Future? –
ответ с объяснением – Tala