Uygulamamda, bazı küçük duraklamalar ile kalıcı olarak çalışan 4 farklı işlem var.Çoklu newSingleThreadExecutor ve newFixedThreadHavuz ExecutionService
kodunun güncel sürümü ayrı bir eski okul dizisindeki her işlemi gerçekleştirir:
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();
Şimdi ExecutorService
kullanımı ile bu kodu refactor istiyorum. Bunu yapmak için en az iki yaklaşım kullanabilirim:
newFixedThreadPool(numOfProc)
;numOfProc * newSingleThreadExecutor()
.
Sorularım:
- ben başka bir yere bir seçeneği tercih etmelidir için bir sebep var mı?
- X iş parçacıklı bir iş parçacığı havuzu oluşturmak veya X newSingleThreadExecutor oluşturmak için daha ne kabul edilir?
- Her bir yaklaşımın karşıtı mı? Her görevin Verilen
Seçeneği. – Spotted
Başka bir notta, kodu, infinite döngü içinde, çalıştırıldığında kendini executor hizmeti olarak yeniden gönderen bir 'Runnable' olarak yeniden yazabilirsiniz. Bu şekilde, birden çok görev tek bir iş parçacığında bile çalışabilir. –