ja szukaliśmy sposobów, aby zabić wątek i wydaje się, że jest to najbardziej popularne podejściemetoda alternatywna zabić wątek
public class UsingFlagToShutdownThread extends Thread {
private boolean running = true;
public void run() {
while (running) {
System.out.print(".");
System.out.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
}
System.out.println("Shutting down thread");
}
public void shutdown() {
running = false;
}
public static void main(String[] args)
throws InterruptedException {
UsingFlagToShutdownThread t = new UsingFlagToShutdownThread();
t.start();
Thread.sleep(5000);
t.shutdown();
}
}
Jednakże, jeśli w pętli while my tarło kolejny kolejny przedmiot, który zostanie zapełniony dane (powiedzmy, że GUI działa i aktualizuje), a następnie w jaki sposób oddzwonimy - szczególnie biorąc pod uwagę, że ta metoda mogła zostać wywołana kilka razy, więc mamy wiele wątków z czasem (działa), a zmiana flagi na jedną spowoduje zmianę dla wszystkich?
dzięki
** Nie rozwiązanie, ale najlepsze praktyki: ** Deklarują swoją flagę 'running' jako' volatile'. –
Najlepszym podejściem do zabijania nici jest nie próbowanie. Jeśli istnieje sposób, w jaki można zaprojektować aplikację, aby wątki nie musiały być zabijane, dopóki system operacyjny nie zabije ich podczas kończenia procesu, należy to zrobić dokładnie. –
, ale jeśli metoda run ma nieskończoną pętlę, nawet jeśli zamkniesz gui, do którego wątek przesyła dane, to nadal nie umrze :( – Biscuit128