/ / jak zatrzymać wątki potomne, jeśli wyjątek występuje w którymkolwiek z nich z wątku nadrzędnego - java, wielowątkowość, executorservice

jak zatrzymać wątki potomne, jeśli wystąpi wyjątek w którymkolwiek z nich z wątku nadrzędnego - java, wielowątkowość, executorservice

Chcę zatrzymać wątek, który nie ma takiej pętli

while(!cancelled) //where cancelled is volatile variable
{
//
}

nie można użyć, ponieważ chcę wykonać długotrwałe zadanie bez pętli, jak zatrzymać wątki potomne, jeśli wystąpi wyjątek w którymkolwiek z nich z wątku nadrzędnego

@Oliver

Jak wspomniano w dokumentach wyroczni

for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We"ve been interrupted: no more crunching.
return;
}
}

w powyższym kodzie if () wywoła tylko jeśli heavyCrunch (dane wejściowe [i]) zostały zakończone

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że celujesz w aplikację sterowaną przerwaniami. Możesz zachować listę wątków, które zostały stworzone, aw swoim wyjątku iteruj przez inne wątki i przerwij je.

https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html