logo

Livssyklus og tilstander til en tråd i Java

EN tråd i Java kan eksistere i en av følgende tilstander til enhver tid. En tråd ligger bare i en av de viste tilstandene til enhver tid:

  1. Ny stat
  2. Kjørbar tilstand
  3. Blokkert stat
  4. Ventetilstand
  5. Tidsbestemt ventetilstand
  6. Avsluttet stat

Diagrammet nedenfor representerer ulike tilstander i en tråd til enhver tid:

Livssyklus-og-tilstander-i-en-tråd-i-Java' title=




Livssyklusen til en tråd 

Det er flere tilstander i tråden i en livssyklus som nevnt nedenfor:

  1. Ny tråd: Når en ny tråd opprettes er den i ny stat . Tråden har ennå ikke begynt å kjøre når tråden er i denne tilstanden. Når en tråd ligger i den nye tilstanden er koden ennå ikke kjørt og har ikke begynt å kjøre.
  2. Kjørbar tilstand : En tråd altså klar til å løpe flyttes til en kjørbar tilstand. I denne tilstanden kan en tråd faktisk kjøre, eller den kan være klar til å kjøre når som helst. Det er trådplanleggerens ansvar å gi tråden tid til å kjøre. Et flertråds program tildeler en fast tidsperiode til hver enkelt tråd. Hver eneste tråd får en liten mengde tid å kjøre. Etter å ha kjørt en stund stopper en tråd og gir opp CPU-en slik at andre tråder kan kjøres.
  3. Blokkert: Tråden vil være i blokkert tilstand når den prøver å skaffe en lås men for øyeblikket er låsen ervervet av den andre tråden. Tråden vil flytte fra blokkert tilstand til kjørbar tilstand når den får låsen.
  4. Ventetilstand : Tråden vil være i ventetilstand når den kaller vent() metode eller bli med() metode. Den vil gå til kjørbar tilstand når en annen tråd vil varsle eller den tråden vil bli avsluttet.
  5. Tidsbestemt venter : En tråd ligger i en tidsbestemt ventetilstand når den kaller en metode med en time-out-parameter . En tråd ligger i denne tilstanden til tidsavbruddet er fullført eller til et varsel mottas. For eksempel når en tråd kaller hvilemodus eller en betinget ventetid, flyttes den til en tidsbestemt ventetilstand.
  6. Avsluttet tilstand: En tråd avsluttes på grunn av en av følgende årsaker: 
    • Fordi den går ut normalt. Dette skjer når koden til tråden er fullstendig utført av programmet.
    • Fordi det skjedde en uvanlig feilhendelse som en segmenteringsfeil eller et ubehandlet unntak.

Trådtilstander i Java

I Java for å få den nåværende tilstanden til tråden bruk Thread.getState() metode for å få den nåværende tilstanden til tråden. Java gir java.lang.Thread.State enum som definerer ENUM-konstantene for tilstanden til en tråd som et sammendrag som er gitt nedenfor: 

1. Ny 

Trådtilstand for en tråd som ennå ikke har startet. 

jsp javatpoint

offentlig statisk endelig tråd.State NY

2. Kjørbar 

Trådtilstand for en løpbar tråd. En tråd i kjørbar tilstand kjøres i den virtuelle Java-maskinen, men den kan vente på andre ressurser fra operativsystemet, for eksempel en prosessor. 

offentlig statisk endelig tråd.State KJØRBAR

3. Blokkert 

Trådtilstand for en tråd blokkert som venter på en skjermlås. En tråd i blokkert tilstand venter på at en monitorlås skal gå inn i en synkronisert blokk/metode eller gå inn i en synkronisert blokk/metode igjen etter å ha ringt Object.wait(). 

offentlig statisk endelig tråd.State BLOKKERT

4. Venter 

 Trådtilstand for en ventende tråd. En tråd er i ventetilstand på grunn av å ringe en av følgende metoder: 

  • Object.wait uten tidsavbrudd
  • Tråd.bli med uten timeout
  • LockSupport.park

offentlig statisk endelig Tråd.State VENTER

5. Tidsbestemt venting 

Trådtilstand for en ventende tråd med angitt ventetid. En tråd er i tidsbestemt ventetilstand på grunn av å ringe en av følgende metoder med en spesifisert positiv ventetid: 

  • Tråd.søvn
  • Object.wait med tidsavbrudd
  • Thread.join med timeout
  • LockSupport.parkNanos
  • LockSupport.parkUntil

offentlig statisk siste tråd. Tilstand TIMED_WAITING

array.sort i java

6. Avsluttet 

Trådtilstand for en avsluttet tråd. Tråden er fullført. 

offentlig statisk endelig tråd.Tilstand AVSLUTTET


Eksempel på demonstrerende trådtilstander

Nedenfor er et virkelighetseksempel på et billettbestillingssystem som viser forskjellige trådtilstander:

Eksempel:

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


eksempler på java-kode

Produksjon:

Produksjon' loading='lazy' title=


Forklaring:

  • Når en ny tråd opprettes, er tråden i NY tilstand. Når start()-metoden kalles på en tråd, flytter trådplanleggeren den til tilstanden Runnable.
  • Hver gang join()-metoden kalles på en trådforekomst, går hovedtråden til Venter på at bestillingstråden skal fullføres.
  • Når trådens kjøremetode er fullført, blir dens tilstand avsluttet.
Lag quiz