Приложенное серверное приложение получает несколько запросов для задач, которые я хочу обработать, используя систему задач.Исполнитель: Подождите, пока не закончится выполнение определенных задач.
Каждая задача представлена в виде Runnable
, которая потребует n
количество потоков из пула потоков, где n
меньше или равно размеру пула потоков. Пул потоков, конечно, необходим для того, чтобы не перегружал процессор слишком большим количеством потоков.
Однако некоторые из этих задач могут быть многопоточными, а некоторые не могут. Поэтому может потребоваться, чтобы одна задача дождалась завершения всех ее конкретных потоков, чтобы объединить результаты этих потоков для конечного результата.
Если один использует несколько Thread
экземпляров один может присоединиться к тем, как это:
try {
// Wait for all threads to finish their tasks
for (Thread thread : threads) {
thread.join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
// Finish job here ..
, но мне нужно что-то вроде этого, используя java.util.concurrent.Executor
или что-нибудь подобное, что работает с пулом потоков.
Я могу ошибаться, но он чувствует, как вы используете Исполнителю на неправильном уровне абстракции. Если у вас есть задача, для которой требуется выполнение потоков * n *, я предлагаю вам позволить этой задаче создать собственный пул потоков или разбить ее на более мелкие задачи с одним потоком. – aioobe
@aioobe у вас может оказаться слишком много исполнителей/пулов, которые не эффективны. – bachr
. Перед началом работы каждая задача может сделать someSharedSemaphore.acquire (n). – aioobe