Używam Executors.newCachedThreadPool()
i invokeAll
z Listą Callable
s do długotrwałego przetwarzania wielowątkowego. Mój główny wątek jest blokowany do czasu zakończenia wszystkich wątków i mogę przetworzyć transakcje Futures zwrócone przez invokeAll
. Chciałbym jednak, aby invokeAll
natychmiast powrócił, jeśli jeden z Callable
s rzuci wyjątek i zakończy inne wątki.Powróć do głównego wątku, jak tylko jeden wątek podrzędny zgłasza wyjątek
Używanie execute
zamiast invokeAll
spowoduje zablokowanie pierwszego future.get()
, który nie musi być tym, który rzuca wykonanie.
Korzystanie z zajęty czekanie na pętli przez wszystkie futures i sprawdzanie isDone()
wydaje się również nie być najlepszym sposobem.
Czy próbowałeś wyłączyć usługę execos i przerywać inne zadania? jeśli te inne zadania nie czekają/nie czytają, mogą nadal sprawdzać flagę przerwania wątku co jakiś czas – radai