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 № 1Wyglą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