logo

Livscyklus og tilstande af en tråd i Java

EN tråd i Java kan eksistere i en af ​​følgende tilstande til enhver tid. En tråd ligger kun i en af ​​de viste tilstande på et hvilket som helst tidspunkt:

  1. Ny stat
  2. Kørbar tilstand
  3. Blokeret tilstand
  4. Ventetilstand
  5. Tidsbestemt ventetilstand
  6. Opsagt stat

Diagrammet nedenfor repræsenterer forskellige tilstande af en tråd på ethvert tidspunkt:

Livscyklus-og-tilstande-i-en-tråd-i-Java' title=




En tråds livscyklus 

Der er flere tilstande af tråden i en livscyklus som nævnt nedenfor:

  1. Ny tråd: Når en ny tråd oprettes, er den i ny stat . Tråden er endnu ikke begyndt at køre, når tråden er i denne tilstand. Når en tråd ligger i den nye tilstand, er dens kode endnu ikke kørt og er ikke begyndt at køre.
  2. Kørbar tilstand : En tråd altså klar til at køre flyttes til en kørebar tilstand. I denne tilstand kan en tråd faktisk køre, eller den kan være klar til at køre på ethvert tidspunkt. Det er trådplanlæggerens ansvar at give tråden tid til at køre. Et flertrådet program tildeler en fast mængde tid til hver enkelt tråd. Hver eneste tråd får en lille mængde tid til at køre. Efter at have kørt et stykke tid holder en tråd pause og opgiver CPU'en, så andre tråde kan køre.
  3. Blokeret: Tråden vil være i blokeret tilstand når den forsøger at anskaffe en lås men i øjeblikket er låsen erhvervet af den anden tråd. Tråden vil flytte fra blokeret tilstand til kørebar tilstand, når den får låsen.
  4. Ventetilstand : Tråden vil være i ventetilstand når den kalder vent() metode eller join() metode. Det vil flytte til den kørebare tilstand, når en anden tråd vil give besked, eller den tråd vil blive afsluttet.
  5. Tidsbestemt venter : En tråd ligger i en tidsindstillet ventetilstand, når den kalder en metode med en timeout-parameter . En tråd ligger i denne tilstand, indtil timeoutet er fuldført, eller indtil en meddelelse modtages. For eksempel når en tråd kalder søvn eller en betinget ventetid, flyttes den til en tidsbestemt ventetilstand.
  6. Afsluttet tilstand: En tråd afsluttes på grund af en af ​​følgende årsager: 
    • Fordi den forlader normalt. Dette sker, når koden til tråden er blevet fuldstændig udført af programmet.
    • Fordi der opstod en usædvanlig fejlbegivenhed som en segmenteringsfejl eller en uhåndteret undtagelse.

Trådtilstande i Java

I Java for at få den aktuelle tilstand af tråden brug Thread.getState() metode til at få den aktuelle tilstand af tråden. Java giver java.lang.Thread.State enum, der definerer ENUM-konstanterne for tilstanden af ​​en tråd, som et resumé af det er givet nedenfor: 

1. Nyt 

Trådtilstand for en tråd, der endnu ikke er startet. 

java escape karakter

offentlig statisk endelig tråd.State NY

2. Kørbar 

Trådtilstand for en løbbar tråd. En tråd i den kørebare tilstand udføres i den virtuelle Java-maskine, men den venter muligvis på andre ressourcer fra operativsystemet, såsom en processor. 

offentlig statisk endelig Tråd.State KØRBAR

3. Blokeret 

Trådtilstand for en tråd blokeret, der venter på en skærmlås. En tråd i blokeret tilstand venter på, at en monitorlås går ind i en synkroniseret blok/metode eller genindsætter en synkroniseret blok/metode efter opkald Object.wait(). 

offentlig statisk endelig tråd.State BLOKERT

4. Venter 

 Trådtilstand for en ventende tråd. En tråd er i ventetilstand på grund af opkald til en af ​​følgende metoder: 

  • Object.wait uden timeout
  • Tråd.tilslut uden timeout
  • LockSupport.park

offentlig statisk endelig Tråd.Stat VENTER

5. Tidsbestemt ventetid 

Trådtilstand for en ventende tråd med en specificeret ventetid. En tråd er i tidsindstillet ventetilstand på grund af opkald til en af ​​følgende metoder med en specificeret positiv ventetid: 

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

offentlig statisk endelig tråd.State TIMED_WAITING

array.sort i java

6. Afsluttet 

Trådtilstand for en afsluttet tråd. Tråden har afsluttet eksekveringen. 

offentlig statisk endelig Tråd.State OPSÅET


Eksempel på demonstration af trådtilstande

Nedenfor er et eksempel fra den virkelige verden på et billetbestillingssystem, der viser forskellige trådtilstande:

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


cassidy hutchinson uddannelse

Produktion:

Produktion' loading='lazy' title=


Forklaring:

  • Når en ny tråd oprettes, er tråden i tilstanden NY. Når start()-metoden kaldes på en tråd, flytter trådplanlæggeren den til tilstanden Runnable.
  • Hver gang join()-metoden kaldes på en trådforekomst, går hovedtråden til Venter på, at bookingtråden er fuldført.
  • Når trådens kørselsmetode er fuldført, bliver dens tilstand afsluttet.
Opret quiz