logo

„Java“ gijos gyvavimo ciklas ir būsenos

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ų:

  1. Naujoji valstybė
  2. Paleidžiama valstybė
  3. Užblokuota būsena
  4. Laukimo valstybė
  5. Laiku nustatyta laukimo būsena
  6. Nutraukta valstybė

Toliau pateiktoje diagramoje pavaizduotos įvairios gijos būsenos bet kuriuo momentu:

„Java“ gyvavimo ciklas ir gijos būsenos' title=




Gijos gyvavimo ciklas 

Kaip nurodyta toliau, gyvavimo cikle yra keletas gijos būsenų:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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ą.
  6. 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:

Išvestis' loading='lazy' title=


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.
Sukurti viktoriną