Я пишу код, где мне нужно убедиться, что нить не выполняется в пуле потоков до того, как я зафиксирую результаты (чтобы не потерять данные, которые я должен был бы положить в фиксацию). Для этого я использую:Как я могу сказать, что потоки в ThreadPoolExecutor выполнены?
while (_executor.getActiveCount() > 0)
{
try
{
Thread.sleep(10); // milliseconds
}
catch (InterruptedException e)
{
// OK do nothing
}
}
Но коллега отметил в обзоре, что документ для getActiveCount гласит:
- Возвращает приблизительное количество потоков, которые активно
- выполнения задания.
Итак, есть риск, который я бы выйти из цикла в то время, пока все еще активных потоков в пуле? Если да, то каков был бы правильный способ дождаться завершения всех моих рабочих потоков?
Редактировать: Чтобы добавить еще какой-либо контекст: это онлайн-система, в которой задача, содержащая службу-исполнитель, остается неопределенной. Работа приходит через систему обмена сообщениями, помещается в поток в исполнителе, который не нуждается в синхронизации, и работы выходят в другую очередь для системы обмена сообщениями. Я не хочу убивать исполнителя, чтобы дождаться завершения задач.
Не могли бы вы подождать выполнения задач, вместо того, чтобы ждать исполнителя быть без работы? http://stackoverflow.com/questions/12896755/executorservice-with-invokeall-and-future-in-java – zapl