#java #multithreading
#java #многопоточность
Вопрос:
В Java класс Executor не имеет shutdownNow() / awaitTermination, подобного подклассу ExecutorService. Итак, если вы запускаете задачу / поток, вызывая executorObject.execute(runnableTask), как вы можете проверить, завершена ли эта задача?
Комментарии:
1. Если у вас есть контроль над кодом Runnable, вы можете поместить что-нибудь в конец его
run
метода. В противном случае, если исполнитель не является ExecutorService, нет способа узнать, когда была запущена задача.
Ответ №1:
Вы не можете сделать это с помощью Executor
просто потому, что он предоставляет единственный метод void execute(Runnable)
. Если вы не рассматриваете возможность использования Executor
реализаций, которые возвращают Future
, вы можете реализовать собственный механизм уведомления / ожидания:
final CountDownLatch latch = new CountDownLatch(1);
Runnable task = () -> {
try {
// ... do useful work
} finally {
latch.countDown();
}
}
executorObject.execute(task);
// wrap into try/catch for InterruptedException
// if not propagating further
latch.await(); // await(timeout);