logo

Životni ciklus i stanja niti u Javi

A nit u Javi može postojati u bilo kojem od sljedećih stanja u bilo koje vrijeme. Nit se u bilo kojem trenutku nalazi samo u jednom od prikazanih stanja:

  1. Nova država
  2. Pokretljivo stanje
  3. Blokirano stanje
  4. Država čekanja
  5. Vremensko stanje čekanja
  6. Raskinuto stanje

Donji dijagram predstavlja različita stanja niti u bilo kojem trenutku:

Životni ciklus-i-stanja-niti-u-Javi' title=




Životni ciklus niti 

Postoji više stanja niti u životnom ciklusu kao što je navedeno u nastavku:

  1. Nova tema: Kada se stvori nova nit, ona je u novo stanje . Nit se još nije pokrenula kada je nit u ovom stanju. Kada nit leži u novom stanju, njen kod tek treba biti pokrenut i nije se počeo izvršavati.
  2. Pokretljivo stanje : Nit koja je spreman za trčanje se premješta u radno stanje. U ovom stanju nit bi mogla biti pokrenuta ili bi mogla biti spremna za pokretanje u bilo kojem trenutku. Raspoređivač niti je dužan dati niti vremena za izvođenje. Program s više niti dodjeljuje fiksnu količinu vremena svakoj pojedinačnoj niti. Svaka nit dobiva malu količinu vremena za izvođenje. Nakon što se neko vrijeme izvodi, nit se zaustavlja i odustaje od CPU-a kako bi druge niti mogle raditi.
  3. Blokiran: Nit će biti u blokiranom stanju kada pokušava steći bravu ali trenutno zaključavanje preuzima druga nit. Nit će prijeći iz blokiranog stanja u stanje koje se može izvoditi kada stekne zaključavanje.
  4. Stanje čekanja : Nit će biti u stanju čekanja kada pozove čekaj() metoda ili pridružiti se () metoda. Preći će u stanje pokretanja kada druga nit obavijesti o tome ili kada ta nit bude prekinuta.
  5. Vremensko čekanje : Nit leži u vremenskom stanju čekanja kada je poziva metodu s parametrom isteka vremena . Nit leži u ovom stanju dok ne istekne vremensko ograničenje ili dok se ne primi obavijest. Na primjer, kada nit pozove mirovanje ili uvjetno čekanje, premješta se u vremensko ograničeno stanje čekanja.
  6. Prekinuto stanje: Nit se prekida zbog jednog od sljedećih razloga: 
    • Jer izlazi normalno. To se događa kada je program u potpunosti izvršio kod niti.
    • Zato što se dogodio neki neuobičajeni pogrešan događaj poput pogreške segmentacije ili neobrađene iznimke.

Stanja niti u Javi

U Javi se koristi trenutno stanje niti Thread.getState() metoda za dobivanje trenutnog stanja niti. Java pruža java.lang.Thread.State enum koji definira ENUM konstante za stanje niti kao sažetak koji je dan u nastavku: 

1. Novo 

Stanje niti za nit koja još nije pokrenuta. 

vraćanje nizova u Javi

public static final Thread.State NOVO

2. Pokretljiv 

Stanje niti za pokrenutu nit. Nit u stanju pokretanja izvršava se u Java virtualnom stroju, ali možda čeka druge resurse iz operativnog sustava kao što je procesor. 

public static final Thread.State RUNNABLE

3. Blokiran 

Stanje niti za nit koja je blokirana čekajući zaključavanje monitora. Nit u blokiranom stanju čeka zaključavanje monitora da uđe u sinkronizirani blok/metodu ili ponovno uđe u sinkronizirani blok/metodu nakon poziva Object.wait(). 

javascript base64 dekodirati

public static final Thread.State BLOCKED

4. Čekanje 

 Stanje niti za nit na čekanju. Nit je u stanju čekanja zbog pozivanja jedne od sljedećih metoda: 

  • Object.wait bez vremenskog ograničenja
  • Thread.join bez vremenskog ograničenja
  • LockSupport.park

public static final Thread.State WAITING

5. Vremensko čekanje 

Stanje niti za nit koja čeka s određenim vremenom čekanja. Nit je u vremenskom stanju čekanja zbog pozivanja jedne od sljedećih metoda s navedenim pozitivnim vremenom čekanja: 

  • Nit.spavati
  • Object.wait s vremenskim ograničenjem
  • Thread.join s timeoutom
  • LockSupport.parkNanos
  • LockSupport.parkUntil

public static final Thread.State TIMED_WAITING

6. Raskinuto 

Stanje niti za prekinutu nit. Nit je dovršila izvođenje. 

public static final Thread.State TERMINATED


Primjer demonstracije stanja niti

Ispod je primjer stvarnog sustava za rezervaciju karata koji pokazuje različita stanja niti:

Primjer:

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


prednosti i mane tehnologije

Izlaz:

Izlaz' loading='lazy' title=


Obrazloženje:

  • Kada se stvori nova nit, nit je u stanju NOVO. Kada se na niti pozove metoda start(), planer niti je premješta u stanje Runnable.
  • Kad god se metoda join() pozove na instanci niti, glavna nit prelazi na čekanje da se nit rezervacije završi.
  • Nakon što metoda pokretanja niti završi, njeno stanje postaje prekinuto.
Napravi kviz