В моем приложении у меня есть 4 различных процесса, которые работают постоянно с небольшими паузами.Несколько newSingleThreadExecutor против newFixedThreadPool от ExecutorService
Текущая версия кода выполняет каждый процесс в отдельной старой школы резьбы:
Thread nlpAnalyzer = new Thread(() -> {
// infine lop for auto restore in case of crash
//noinspection InfiniteLoopStatement
while (true) {
try {
// this method should run permanently, pauses implemented internally
NLPAnalyzer.analyzeNLP(dbCollection);
} catch (Exception e) {
e.printStackTrace();
}
}
});
nlpAnalyzer.setName("im_nlpAnalyzer");
nlpAnalyzer.start();
Теперь я хотел бы реорганизовать этот код с использованием ExecutorService
. Для этого я могу использовать как минимум два подхода:
newFixedThreadPool(numOfProc)
;numOfProc * newSingleThreadExecutor()
.
Мои вопросы:
- Есть ли причина, почему я должен предпочесть один вариант по другому?
- Что более приемлемо для создания пула потоков с потоками X или генерации X newSingleThreadExecutor?
- Про и против каждого подхода?
Вариант 1 является более распространенным и имеет минимум накладных расходов. – Spotted
В другом примечании, вы можете переписать код внутри бесконечного цикла как «Runnable», который снова загружается в качестве службы-исполнителя при запуске. Таким образом, несколько задач могут выполняться даже в одном потоке. –