logo

Livscykel och tillstånd för en tråd i Java

A tråd i Java kan existera i vilket som helst av följande tillstånd vid varje given tidpunkt. En tråd ligger bara i ett av de visade tillstånden vid något ögonblick:

  1. Ny stat
  2. Körbart tillstånd
  3. Blockerad stat
  4. Väntande tillstånd
  5. Tidsatt vänteläge
  6. Avslutad stat

Diagrammet nedan representerar olika tillstånd för en tråd vid varje ögonblick:

Livscykel-och-tillstånd-i-en-tråd-i-Java' title=




En tråds livscykel 

Det finns flera tillstånd i tråden i en livscykel som nämns nedan:

  1. Ny tråd: När en ny tråd skapas ligger den i ny stat . Tråden har ännu inte börjat köras när tråden är i detta tillstånd. När en tråd ligger i det nya tillståndet ska dess kod ännu köras och har inte börjat köras.
  2. Körbart tillstånd : En tråd alltså redo att springa flyttas till ett körbart tillstånd. I detta tillstånd kan en tråd faktiskt köras eller så kan den vara redo att köras när som helst. Det är trådschemaläggarens ansvar att ge tråden tid att köra. Ett flertrådigt program tilldelar en fast tidsperiod till varje enskild tråd. Varje tråd får en liten tid att köra. Efter att ha kört ett tag pausar en tråd och ger upp processorn så att andra trådar kan köras.
  3. Blockerad: Tråden kommer att vara i blockerat tillstånd när den försöker skaffa ett lås men för närvarande förvärvas låset av den andra tråden. Tråden kommer att flytta från det blockerade tillståndet till det körbara tillståndet när den får låset.
  4. Väntande tillstånd : Tråden kommer att vara i vänteläge när den ringer vänta() metod eller ansluta sig till() metod. Den kommer att flyttas till körbart läge när den andra tråden kommer att meddela eller att tråden kommer att avslutas.
  5. Tidsinställd väntar : En tråd ligger i ett tidsbestämt väntande tillstånd när den anropar en metod med en timeout-parameter . En tråd ligger i detta tillstånd tills timeouten är klar eller tills ett meddelande tas emot. Till exempel när en tråd anropar viloläge eller en villkorlig väntan flyttas den till ett tidsbestämt vänteläge.
  6. Avslutat tillstånd: En tråd avslutas på grund av något av följande skäl: 
    • Eftersom det går ut normalt. Detta händer när koden för tråden har körts helt av programmet.
    • Eftersom det inträffade någon ovanlig felaktig händelse, som ett segmenteringsfel eller ett ohanterat undantag.

Trådtillstånd i Java

I Java för att få aktuell status för tråden använd Thread.getState() metod för att få det aktuella tillståndet för tråden. Java ger java.lang.Thread.State enum som definierar ENUM-konstanterna för tillståndet för en tråd som en sammanfattning av detta ges nedan: 

1. Nytt 

Trådstatus för en tråd som ännu inte har startat. 

förlängningsfil java

offentlig statisk slutlig Thread.State NY

2. Körbar 

Trådtillstånd för en löpbar tråd. En tråd i körbart tillstånd körs i den virtuella Java-maskinen men den kan vänta på andra resurser från operativsystemet, till exempel en processor. 

offentlig statisk slutlig tråd. Tillstånd KÖRBAR

3. Blockerad 

Trådtillstånd för en tråd blockerad som väntar på ett monitorlås. En tråd i blockerat tillstånd väntar på att ett monitorlås ska gå in i ett synkroniserat block/metod eller återgå till ett synkroniserat block/metod efter att ha anropat Object.wait(). 

offentlig statisk slutlig tråd.Tillstånd BLOCKERAD

uppdatera i sql med join

4. Väntar 

 Trådstatus för en väntande tråd. En tråd är i vänteläge på grund av anrop av någon av följande metoder: 

  • Object.wait utan timeout
  • Tråd.gå med utan timeout
  • LockSupport.park

offentlig statisk slutlig Tråd.State VÄNTAR

5. Tidsinställd väntan 

Trådstatus för en väntande tråd med angiven väntetid. En tråd är i det tidsinställda vänteläget på grund av att en av följande metoder anropas med en angiven positiv väntetid: 

  • Tråd.sömn
  • Object.wait med timeout
  • Tråd.gå med med timeout
  • LockSupport.parkNanos
  • LockSupport.parkUntil

offentlig statisk slutlig tråd. Tillstånd TIMED_WAITING

6. Avslutad 

Trådtillstånd för en avslutad tråd. Tråden har slutfört exekvering. 

offentlig statisk slutlig tråd.Tillstånd AVSLUTAD


Exempel på att demonstrera trådtillstånd

Nedan är ett verkligt exempel på ett biljettbokningssystem som visar olika trådtillstånd:

Exempel:

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


aws sns

Produktion:

Produktion' loading='lazy' title=


Förklaring:

  • När en ny tråd skapas är tråden i NYTT tillstånd. När start()-metoden anropas på en tråd flyttar trådschemaläggaren den till tillståndet Runnable.
  • Närhelst join()-metoden anropas på en trådinstans går huvudtråden till Väntar på att bokningstråden ska slutföras.
  • När trådens körningsmetod har slutförts blir dess tillstånd avslutad.
Skapa frågesport