Egy szál akkor válik nem futtathatóvá, ha a lenti események közül bármelyik is bekövetkezik:
- Meghívásra kerül a
sleep
metódusa. - A szál meghívja a
wait
metódust, hogy az várjon egy bizonyos feltétel teljesülésére. - A szál blokkolt egy I/O művelet miatt.
A clockThread
a Clock
szálon belül akkor kerül nem futtatható állapotba, mikor a futás metódus meghívja a sleep
-et a jelenlegi szálban:
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// A VM nem akarja, hogy tovább aludjunk,
// szóval irány vissza dolgozni
}
}
}
Az alatt a másodperc alatt, amíg a clockThread
alvó állapotban van, a szál nem fut, még akkor sem fog, ha a processzor erőforrásai elérhetővé válnak. Miután letelik az egy másodperc, a szál újra futtathatóvá válik; ha a processzor erőforrásai elérhetővé válnak, a szál újra futni kezd.
Minden egyes nem futtatható állapotba kerüléskor, egy specifikus és megkülönböztethető exit
metódus téríti vissza a szálat a futtatható állapotba. Egy exit
hívás után csak a megfelelő feltételek teljesülése esetén fog ismét futni. Például: miután egy szál alvó állapotba lett helyezve, a meghatározott ezredmásodpercek lejárta után újból futtatható állapotba kerül. A következő felsorolás leírja a nem futtatható állapot kilépési feltételeit:
- Ha a szál alvó állapotba lett helyezve, a meghatározott időnek le kell telnie.
- Ha egy szál egy feltételre vár, akkor egy másik objektumnak kell értesítenie a várakozó szálat a feltétel teljesüléséről a
notify
vagynotifyAll
metódus meghívásával. - Ha egy szál blokkolva volt egy I/O művelet miatt, az I/O műveletnek be kell fejeződnie.