Jelenlegi hely

19.3.1 Programszál nem futtatható állapotba állítása

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 vagy notifyAll 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.