logo

Životný cyklus a stavy vlákna v Jave

A niť v jazyku Java môže existovať v ktoromkoľvek z nasledujúcich stavov v akomkoľvek danom čase. Vlákno sa v každom okamihu nachádza iba v jednom zo zobrazených stavov:

  1. Nový štát
  2. Spustiteľný stav
  3. Blokovaný štát
  4. Čakajúci štát
  5. Stav načasovaného čakania
  6. Ukončený štát

Nižšie uvedený diagram predstavuje rôzne stavy vlákna v akomkoľvek okamihu:

Životný cyklus-a-stavy-vlákna-v-Java' title=




Životný cyklus vlákna 

V životnom cykle existuje viacero stavov vlákna, ako je uvedené nižšie:

  1. Nové vlákno: Keď sa vytvorí nové vlákno, je v nový štát . Vlákno ešte nezačalo bežať, keď je vlákno v tomto stave. Keď vlákno leží v novom stave, jeho kód sa ešte musí spustiť a nezačal sa vykonávať.
  2. Spustiteľný stav : Vlákno, ktoré je pripravený na spustenie sa presunie do spustiteľného stavu. V tomto stave môže byť vlákno skutočne spustené alebo môže byť kedykoľvek pripravené na spustenie. Je zodpovednosťou plánovača vlákien poskytnúť vláknu čas na spustenie. Viacvláknový program prideľuje pevné množstvo času každému jednotlivému vláknu. Každé vlákno má na spustenie malé množstvo času. Po chvíli behu sa vlákno zastaví a vzdá sa CPU, aby mohli bežať iné vlákna.
  3. Blokované: Vlákno bude v zablokovanom stave keď sa pokúša získať zámok ale v súčasnosti zámok získava iné vlákno. Vlákno sa po získaní zámku presunie z blokovaného stavu do spustiteľného stavu.
  4. Stav čakania : Vlákno bude v stave čakania keď zavolá čakať () spôsob resp pripojiť sa () metóda. Prejde do spustiteľného stavu, keď na to upozorní iné vlákno alebo keď bude toto vlákno ukončené.
  5. Načasované čakanie : Vlákno leží v časovom stave čakania, keď je volá metódu s parametrom časového limitu . Vlákno zostáva v tomto stave až do ukončenia časového limitu alebo do prijatia upozornenia. Napríklad, keď vlákno zavolá spánok alebo podmienené čakanie, presunie sa do stavu načasovaného čakania.
  6. Ukončený stav: Vlákno sa ukončí z jedného z nasledujúcich dôvodov: 
    • Pretože normálne odchádza. Toto sa stane, keď program úplne vykoná kód vlákna.
    • Pretože sa vyskytla nejaká nezvyčajná chybná udalosť, ako je chyba segmentácie alebo neošetrená výnimka.

Stavy vlákien v jazyku Java

V jazyku Java získate aktuálny stav použitia vlákna Thread.getState() metóda na získanie aktuálneho stavu vlákna. Java poskytuje java.lang.Thread.State enum, ktorý definuje konštanty ENUM pre stav vlákna, ktorého súhrn je uvedený nižšie: 

1. Nové 

Stav vlákna pre vlákno, ktoré ešte nezačalo. 

návrh databázy v dbms

verejné statické konečné vlákno.Stav NOVINKA

2. Spustiteľný 

Stav vlákna pre spustiteľné vlákno. Vlákno v spustenom stave sa vykonáva vo virtuálnom stroji Java, ale môže čakať na iné prostriedky z operačného systému, ako je napríklad procesor. 

public static final Thread.State RUNNABLE

3. Blokované 

Stav vlákna pre vlákno zablokované čakajúce na uzamknutie monitora. Vlákno v zablokovanom stave čaká na uzamknutie monitora, aby vstúpilo do synchronizovaného bloku/metódy alebo po zavolaní znova vstúpilo do synchronizovaného bloku/metódy Object.wait(). 

public static final Thread.State BLOCKED

4. Čakanie 

 Stav vlákna pre čakajúce vlákno. Vlákno je v stave čakania kvôli volaniu jednej z nasledujúcich metód: 

  • Object.wait bez časového limitu
  • Thread.join bez časového limitu
  • LockSupport.park

verejné statické záverečné Vlákno.Čakanie stavu

5. Časované čakanie 

Stav vlákna pre čakajúce vlákno so špecifikovaným časom čakania. Vlákno je v stave časovaného čakania kvôli volaniu jednej z nasledujúcich metód so zadanou kladnou dobou čakania: 

  • Niť.spánok
  • Object.wait s časovým limitom
  • Thread.join s časovým limitom
  • LockSupport.parkNanos
  • LockSupport.parkAž

verejné statické konečné vlákno.Stav TIMED_WAITING

názov mesta USA

6. Ukončené 

Stav vlákna pre ukončené vlákno. Vlákno bolo dokončené. 

verejné statické konečné vlákno.Stav UKONČENÝ


Príklad demonštrácie stavov vlákien

Nižšie je uvedený reálny príklad systému rezervácie vstupeniek, ktorý demonštruje rôzne stavy vlákna:

Príklad:

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


ako vypnúť režim vývojára v systéme Android

výstup:

Výstup' loading='lazy' title=


Vysvetlenie:

  • Keď sa vytvorí nové vlákno, vlákno je v stave NEW. Keď sa vo vlákne zavolá metóda start(), plánovač vlákien ju presunie do stavu Runnable.
  • Vždy, keď sa na inštancii vlákna zavolá metóda join(), hlavné vlákno prejde na Čaká sa na dokončenie vlákna rezervácie.
  • Po dokončení metódy spustenia vlákna sa stav vlákna zmení na Ukončený.
Vytvoriť kvíz