logo

Življenjski cikel in stanja niti v Javi

A nit v Javi lahko kadar koli obstaja v katerem koli od naslednjih stanj. Nit je v katerem koli trenutku le v enem od prikazanih stanj:

  1. Nova država
  2. Zagonsko stanje
  3. Blokirano stanje
  4. Čakalno stanje
  5. Časovno določeno čakalno stanje
  6. Končano stanje

Spodnji diagram predstavlja različna stanja niti v katerem koli trenutku:

Življenjski cikel-in-stanja-niti-v-Javi' title=




Življenjski cikel niti 

Obstaja več stanj niti v življenjskem ciklu, kot je navedeno spodaj:

  1. Nova nit: Ko se ustvari nova nit, je v novo stanje . Nit se še ni začela izvajati, ko je nit v tem stanju. Ko je nit v novem stanju, je treba njeno kodo še izvajati in se ni začela izvajati.
  2. Zagonsko stanje : Nit, ki je pripravljen za tek se premakne v zagonsko stanje. V tem stanju se lahko nit dejansko izvaja ali pa je pripravljena za izvajanje v katerem koli trenutku. Razporejevalnik niti je odgovoren, da da niti čas za izvajanje. Večnitni program vsaki posamezni niti dodeli fiksno količino časa. Vsaka nit ima malo časa za izvajanje. Ko nekaj časa teče, se nit ustavi in ​​opusti CPE, da lahko druge niti delujejo.
  3. Blokirano: Nit bo v blokiranem stanju ko poskuša pridobiti ključavnico vendar trenutno zaklepanje pridobi druga nit. Ko pridobi zaklepanje, se nit premakne iz blokiranega stanja v zagonsko stanje.
  4. Čakalno stanje : Nit bo v stanju čakanja ko pokliče čakaj() metoda oz pridruži se() metoda. Ko bo druga nit obvestila ali bo ta prekinjena, se bo premaknila v zagonsko stanje.
  5. Časovno čakanje : Nit je v časovno določenem čakalnem stanju, ko je pokliče metodo s parametrom časovne omejitve . Nit je v tem stanju, dokler se ne izteče časovna omejitev ali dokler ni prejeto obvestilo. Na primer, ko nit pokliče spanje ali pogojno čakanje, se premakne v časovno določeno čakajoče stanje.
  6. Končano stanje: Nit se prekine zaradi enega od naslednjih razlogov: 
    • Ker izstopa normalno. To se zgodi, ko je program v celoti izvedel kodo niti.
    • Ker je prišlo do nenavadnega napačnega dogodka, kot je napaka segmentacije ali neobravnavana izjema.

Stanje niti v Javi

V Javi za pridobitev trenutnega stanja niti uporabite Thread.getState() metoda za pridobitev trenutnega stanja niti. Java ponuja java.lang.Thread.State enum, ki definira konstante ENUM za stanje niti, katerih povzetek je podan spodaj: 

1. Novo 

Stanje niti za nit, ki se še ni začela. 

java string format long

javni statični končni Thread.State NOVO

2. Izvedljivo 

Stanje niti za zagonsko nit. Nit v zagonskem stanju se izvaja v navideznem stroju Java, vendar morda čaka na druge vire iz operacijskega sistema, kot je procesor. 

javni statični končni Thread.State RUNNABLE

3. Blokirano 

Stanje niti za blokirano nit, ki čaka na zaklepanje monitorja. Nit v blokiranem stanju čaka na zaklepanje monitorja za vstop v sinhronizirani blok/metodo ali ponovni vnos sinhroniziranega bloka/metode po klicu Object.wait(). 

javni statični končni Thread.State BLOCKED

vrsta vedra

4. Čakanje 

 Stanje niti za čakajočo nit. Nit je v stanju čakanja zaradi klica ene od naslednjih metod: 

  • Object.wait brez časovne omejitve
  • Thread.join brez časovne omejitve
  • LockSupport.park

javni statični končni Thread.State WAITING

5. Časovno čakanje 

Stanje niti za čakajočo nit z določenim čakalnim časom. Nit je v časovno omejenem čakalnem stanju zaradi klica ene od naslednjih metod z določenim pozitivnim čakalnim časom: 

  • Nit.spi
  • Object.wait s časovno omejitvijo
  • Thread.join s časovno omejitvijo
  • LockSupport.parkNanos
  • LockSupport.parkUntil

javni statični končni Thread.State TIMED_WAITING

6. Prekinjeno 

Stanje niti za prekinjeno nit. Nit je zaključila izvedbo. 

javni statični končni Thread.State TERMINATED


Primer prikazovanja stanj niti

Spodaj je resničen primer sistema za rezervacijo vstopnic, ki prikazuje različna stanja niti:

primer:

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());  } } 


preberite datoteko csv v javi

Izhod:

Izhod' loading='lazy' title=


Pojasnilo:

  • Ko se ustvari nova nit, je ta v stanju NOVO. Ko je v niti poklicana metoda start(), jo razporejevalnik niti premakne v stanje Runnable.
  • Kadarkoli se na primerku niti pokliče metoda join(), gre glavna nit v Čakanje, da se nit rezervacije zaključi.
  • Ko se metoda izvajanja niti zaključi, njeno stanje postane Prekinjeno.
Ustvari kviz