A siūlas Java bet kuriuo metu gali egzistuoti bet kurioje iš šių būsenų. Siūlas bet kuriuo momentu yra tik vienoje iš parodytų būsenų:
- Naujoji valstybė
- Paleidžiama valstybė
- Užblokuota būsena
- Laukimo valstybė
- Laiku nustatyta laukimo būsena
- Nutraukta valstybė
Toliau pateiktoje diagramoje pavaizduotos įvairios gijos būsenos bet kuriuo momentu:

Gijos gyvavimo ciklas
Kaip nurodyta toliau, gyvavimo cikle yra keletas gijos būsenų:
- Nauja tema: Kai sukuriama nauja gija, ji yra nauja valstybė . Kai gija yra tokios būsenos, gija dar nepradėta. Kai gija yra naujos būsenos, jos kodas dar turi būti paleistas ir nepradėtas vykdyti.
- Paleidžiama valstybė : gija, kuri yra pasiruošęs bėgti perkeliama į paleidžiamą būseną. Šioje būsenoje gija iš tikrųjų gali veikti arba gali būti paruošta paleisti bet kuriuo metu. Gijos planuotojas yra atsakingas už tai, kad gijai būtų suteiktas laiko paleisti. Kelių gijų programa kiekvienai atskirai gijai skiria fiksuotą laiką. Kiekvienas siūlas turi šiek tiek paleisti laiką. Kurį laiką paleidus gija sustoja ir atsisako procesoriaus, kad galėtų veikti kitos gijos.
- Užblokuota: Siūlas bus užblokuotas kai jis bando įsigyti užraktą bet šiuo metu užraktą įgyja kita gija. Gija perkeliama iš užblokuotos būsenos į paleidžiamą būseną, kai ji bus užrakinta.
- Laukimo būsena : gija bus laukimo būsenoje kai skambina laukti () metodas arba prisijungti () metodas. Ji pereis į paleidimo būseną, kai apie tai praneš kita gija arba ta gija bus nutraukta.
- Laiku nustatytas laukimas : gija yra laiko laukimo būsenoje, kai ji iškviečia metodą su skirtojo laiko parametru . Šios būsenos gija yra tol, kol baigsis skirtasis laikas arba kol bus gautas pranešimas. Pavyzdžiui, kai gija iškviečia miego režimą arba sąlyginį laukimą, ji perkeliama į laukimo pagal laiką būseną.
- Nutraukta būsena: Gija nutrūksta dėl vienos iš šių priežasčių:
- Nes išeina normaliai. Taip atsitinka, kai programa visiškai įvykdė gijos kodą.
- Nes įvyko neįprastas klaidingas įvykis, pvz., segmentavimo gedimas arba netvarkoma išimtis.
Gijos būsenos Java
Java, kad gautumėte dabartinę gijos naudojimo būseną Thread.getState() būdas sužinoti dabartinę gijos būseną. Java suteikia java.lang.Thread.State enum, apibrėžiantis gijos būsenos ENUM konstantas, kurios santrauka pateikiama toliau:
1. Nauja
Dar neprasidėjusios gijos gijos būsena.
kaip atkurti paslėptas programas
viešas statinis galutinis Siūlas.Būsena NAUJA
2. Paleidžiamas
Vykdomos gijos gijos būsena. Vykdomos būsenos gija vykdoma „Java“ virtualiojoje mašinoje, tačiau ji gali laukti kitų operacinės sistemos išteklių, pvz., procesoriaus.
viešas statinis galutinis Siūlas.Būsena BĖGAMA
3. Užblokuotas
Gijos būsena užblokuota laukiant monitoriaus užrakinimo. Užblokuotos būsenos gija laukia, kol monitoriaus užraktas įves sinchronizuotą bloką/metodą arba iškvietus iš naujo įves sinchronizuotą bloką/metodą Objektas.laukti().
viešas statinis galutinis Thread.Būsena BLOKUOTA
4. Laukimas
Laukiančios gijos gijos būsena. Gijos laukiama, nes iškviečiamas vienas iš šių metodų:
- Object.laukti be skirtojo laiko
- Siūlai.prisijungti be laiko
- LockSupport.park
viešas statinis galutinis Siūlas.Būsena LAUKIA
klasė vs objektas java
5. Laukimas su laiku
Laukimo gijos su nurodytu laukimo laiku gijos būsena. Gija yra laukimo pagal laiką būsenoje, nes iškviečiamas vienas iš šių metodų su nurodytu teigiamu laukimo laiku:
- Siūlas.miegas
- Objektas.laukti su skirtuoju laiku
- Thread.join su skirtuoju laiku
- LockSupport.parkNanos
- LockSupport.parkIki
viešas statinis galutinis Thread.Būsena TIMED_WAITING
6. Nutraukta
Nutrauktos gijos gijos būsena. Gijos vykdymas baigtas.
viešas statinis galutinis Siūlas.Būsena NUTRAUKTA
Gijos būsenų demonstravimo pavyzdys
Žemiau pateikiamas realus bilietų užsakymo sistemos pavyzdys, rodantis skirtingas gijos būsenas:
Pavyzdys:
Java// Java program to demonstrate thread states // using a ticket booking scenario class TicketBooking implements Runnable { @Override public void run() { try { // Timed waiting Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State of bookingThread while mainThread is waiting: ' + TicketSystem.mainThread.getState()); try { // Another timed waiting Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public class TicketSystem implements Runnable { public static Thread mainThread; public static TicketSystem ticketSystem; @Override public void run() { TicketBooking booking = new TicketBooking(); Thread bookingThread = new Thread(booking); System.out.println('State after creating bookingThread: ' + bookingThread.getState()); bookingThread.start(); System.out.println('State after starting bookingThread: ' + bookingThread.getState()); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State after sleeping bookingThread: ' + bookingThread.getState()); try { // Moves mainThread to waiting state bookingThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State after bookingThread finishes: ' + bookingThread.getState()); } public static void main(String[] args) { ticketSystem = new TicketSystem(); mainThread = new Thread(ticketSystem); System.out.println('State after creating mainThread: ' + mainThread.getState()); mainThread.start(); System.out.println('State after starting mainThread: ' + mainThread.getState()); } }
pilna forma
Išvestis:
Paaiškinimas:
- Sukūrus naują giją, gijos būsena yra NAUJA. Kai gijoje iškviečiamas metodas start(), gijų planuoklis perkelia jį į būseną Runnable.
- Kai gijos egzemplioriuje iškviečiamas join() metodas, pagrindinė gija pereina į Laukiama, kol bus baigta rezervavimo gija.
- Pasibaigus gijos vykdymo metodui, jo būsena tampa nutraukta.