logo

Dzīves cikls un pavediena stāvokļi Java

A pavediens Java jebkurā laikā var pastāvēt jebkurā no šiem stāvokļiem. Pavediens jebkurā brīdī atrodas tikai vienā no parādītajiem stāvokļiem:

  1. Jaunā valsts
  2. Running State
  3. Bloķēts stāvoklis
  4. Gaidīšanas valsts
  5. Noteikts gaidīšanas stāvoklis
  6. Izbeigtā valsts

Zemāk redzamā diagramma attēlo dažādus pavediena stāvokļus jebkurā brīdī:

Dzīves cikls un pavediena statusi Java' title=




Vītnes dzīves cikls 

Dzīves ciklā ir vairāki pavediena stāvokļi, kā minēts tālāk:

  1. Jauns pavediens: Kad tiek izveidots jauns pavediens, tas atrodas mapē jauns stāvoklis . Pavediens vēl nav sācis darboties, kad pavediens ir šādā stāvoklī. Kad pavediens atrodas jaunajā stāvoklī, tā kods vēl ir jāpalaiž un nav sācis izpildīt.
  2. Running State : pavediens, kas ir gatavs skriet tiek pārvietots uz darbināmu stāvokli. Šādā stāvoklī pavediens faktiski var darboties vai var būt gatavs palaišanai jebkurā brīdī. Pavedienu plānotāja pienākums ir dot pavedienam laiku palaišanai. Vairāku pavedienu programma katram atsevišķam pavedienam piešķir noteiktu laiku. Katram pavedienam ir vajadzīgs neliels laiks, lai palaistu. Pēc kāda laika darbības pavediens apstājas un atsakās no CPU, lai citi pavedieni varētu darboties.
  3. Bloķēts: Vītne būs bloķēta kad tas mēģina iegūt slēdzeni bet šobrīd slēdzeni iegūst otrs pavediens. Pavediens tiks pārvietots no bloķēta stāvokļa uz izpildāmu stāvokli, kad tas iegūst bloķēšanu.
  4. Gaidīšanas stāvoklis : pavediens būs gaidīšanas stāvoklī kad tas aicina gaidīt () metode vai pievienoties () metodi. Tas tiks pārvietots uz izpildāmu stāvokli, kad par to paziņos cits pavediens vai šis pavediens tiks pārtraukts.
  5. Noteikta gaidīšana : pavediens atrodas iestatītā gaidīšanas stāvoklī, kad tas izsauc metodi ar taimauta parametru . Pavediens atrodas šādā stāvoklī, līdz taimauts ir pabeigts vai līdz tiek saņemts paziņojums. Piemēram, ja pavediens izsauc miega režīmu vai nosacītu gaidīšanu, tas tiek pārvietots uz noteikta gaidīšanas stāvokli.
  6. Izbeigšanas stāvoklis: Pavediens tiek pārtraukts kāda no šiem iemesliem: 
    • Jo iziet normāli. Tas notiek, ja programma ir pilnībā izpildījusi pavediena kodu.
    • Tā kā ir noticis kāds neparasts kļūdains notikums, piemēram, segmentācijas kļūda vai neapstrādāts izņēmums.

Pavedienu valstis Java

Java, lai iegūtu pašreizējo pavediena lietošanas stāvokli Thread.getState() metode, lai uzzinātu pavediena pašreizējo stāvokli. Java nodrošina java.lang.Thread.State enum, kas definē ENUM konstantes pavediena stāvoklim, kā kopsavilkums ir sniegts tālāk: 

1. Jauns 

Pavediena stāvoklis pavedienam, kas vēl nav sācies. 

buļļi vs vērsis

publisks statisks gala Pavediens.State JAUNS

2. Palaist 

Pavediena stāvoklis palaišanai pavedienam. Pavediens palaišanas stāvoklī tiek izpildīts Java virtuālajā mašīnā, taču, iespējams, tas gaida citus resursus no operētājsistēmas, piemēram, procesoru. 

chown komanda

publisks statisks galīgs Thread.State RUNNABLE

3. Bloķēts 

Pavediena stāvoklis pavedienam ir bloķēts, gaidot monitora bloķēšanu. Pavediens bloķētā stāvoklī gaida, lai monitora bloķēšana ievadītu sinhronizētu bloku/metodi, vai pēc izsaukšanas atkārtoti ievadīs sinhronizētu bloku/metodi. Object.wait(). 

publisks statisks beigu pavediens.State BLOCKED

4. Gaidīšana 

 Pavediena stāvoklis gaidošajam pavedienam. Pavediens ir gaidīšanas stāvoklī, jo tiek izsaukta viena no šīm metodēm: 

  • Object.wait bez taimauta
  • Thread.join bez taimauta
  • LockSupport.park

publisks statisks beigu pavediens.State GAIDA

5. Gaidīšana ar laiku 

Pavediena stāvoklis gaidīšanas pavedienam ar noteiktu gaidīšanas laiku. Pavediens atrodas laika gaidīšanas stāvoklī, jo tiek izsaukta viena no šīm metodēm ar noteiktu pozitīvu gaidīšanas laiku: 

  • Pavediens.miegs
  • Object.wait ar taimautu
  • Thread.join ar taimautu
  • LockSupport.parkNanos
  • LockSupport.parkLīdz

publisks statisks galīgais Thread.State TIMED_WAITING

6. Izbeigts 

Pavediena stāvoklis pārtrauktam pavedienam. Pavediens ir pabeidzis izpildi. 

publiska statiskā galīgā Pavediens.State IZBEIGTA


Pavedienu stāvokļu demonstrēšanas piemērs

Tālāk ir sniegts reāls biļešu rezervēšanas sistēmas piemērs, kas parāda dažādus pavedienu stāvokļus:

Piemērs:

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


java mvc

Izvade:

Izvade' loading='lazy' title=


Paskaidrojums:

  • Kad tiek izveidots jauns pavediens, pavediens ir stāvoklī JAUNS. Kad pavedienā tiek izsaukta metode start(), pavedienu plānotājs to pārvieto uz izpildāmu stāvokli.
  • Ikreiz, kad pavediena instancē tiek izsaukta metode join(), galvenais pavediens pāriet uz Gaida rezervēšanas pavediena pabeigšanu.
  • Kad pavediena palaišanas metode ir pabeigta, tā stāvoklis kļūst par pārtrauktu.
Izveidojiet viktorīnu