In meiner Anwendung habe ich 4 verschiedene Prozesse, die permanent mit einigen kleinen Pausen ausgeführt werden.Mehrere newSingleThreadExecutor vs. newFixedThreadPool von ExecutorService
Die aktuelle Version von Code führt jeden Prozess in einem separaten Thread alte Schule:
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();
Jetzt würde ich mit der Verwendung von ExecutorService
diesen Code Refactoring mag. Um dies zu tun, kann ich mindestens zwei Ansätze verwenden:
newFixedThreadPool(numOfProc)
;numOfProc * newSingleThreadExecutor()
.
Meine Fragen:
- Gibt es einen Grund, warum ich eine Option auf einem anderen vorziehen sollte?
- Was wird mehr akzeptiert, um einen Thread-Pool mit X-Threads zu generieren oder X newSingleThreadExecutor zu generieren?
- Pro und Kontra von jedem der Ansatz?
Option 1 ist häufiger und hat am wenigsten Aufwand. – Spotted
Bei einer anderen Notiz können Sie den Code in der Endlosschleife als 'Runnable' erneut schreiben, der sich beim Ausführen als Executor-Service erneut anmeldet. Auf diese Weise können mehrere Aufgaben sogar für einen einzelnen Thread ausgeführt werden. –