Jelenlegi hely

19.3.2 Programszál leállítása

Habár a Thread osztályban rendelkezésre áll a stop metódus, ezen metódus alkalmazása nem javallott, mert nem biztonságos, pl. adatvesztés léphet fel. Egy szálnak inkább saját magának kell befejezni a futását úgy, hogy a run metódusa természetesen áll le. Például a while ciklus a run metódusban egy véges ciklus 100-szor fut le, majd kilép:

public void run() {
    int i = 0;
    while (i < 100) {
        i++;
        System.out.println("i = " + i);
    }
}

A szál a run metódusban természetesen „hal meg” mikor a ciklus befejeződik és a run metódus kilép.
Nézzük meg, hogyan hajtja végre a Clock szál a saját halálát. Nézzük meg újra a Clock run metódusát:

public void run() {
    Thread myThread = Thread.currentThread();
    while (clockThread == myThread) {
        repaint();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            //the VM doesn't want us to sleep anymore,
            //so get back to work
        }
    }
}

A kilépési feltétel ebben a run metódusban ugyanaz a kilépési feltétele, mint a while ciklusnak, mert a ciklus után nincs kód:

while (clockThread == myThread) {

E feltétel jelzi, hogy a ciklus kilép, ha a jelenleg futásban lévő szál nem egyezik a clockThread-el. Mikor lesz ez a helyzet? Akkor, amikor a felhasználó elhagyja az oldalt, az alkalmazás, melyben a szál fut, meghívja a szál stop metódusát. Ez a metódus ezután beállítja a clockThread-et null értékre, így utasítva a fő ciklust, hogy szakítsa meg a futás metódust:

public void stop() {    // applets' stop method
    clockThread = null;
}