logo

Животни циклус и стања нити у Јави

А конац у Јави може постојати у било ком од следећих стања у било ком тренутку. Нит се налази само у једном од приказаних стања у било ком тренутку:

  1. Нова држава
  2. Руннабле Стате
  3. Блокирано стање
  4. Ваитинг Стате
  5. Временско стање чекања
  6. Терминатед Стате

Дијаграм испод представља различита стања нити у било ком тренутку:

Животни циклус и стања нити у Јави' title=




Животни циклус нити 

Постоји више стања нити у животном циклусу као што је наведено у наставку:

  1. Нова тема: Када се креира нова нит, она је у нова држава . Нит још није почела да се покреће када је нит у овом стању. Када се нит налази у новом стању, њен код тек треба да се покрене и није почео да се извршава.
  2. Руннабле Стате : Нит која је спреман за трчање се премешта у радно стање. У овом стању нит може заиста бити покренута или може бити спремна за покретање у било ком тренутку. Одговорност је планера нити да да време за покретање нити. Програм са више нити додељује фиксно време свакој појединачној нити. Свака нит има мало времена за покретање. Након што неко време ради, нит се паузира и одустаје од ЦПУ-а како би друге нити могле да раде.
  3. Блокирано: Нит ће бити у блокираном стању када покушава да стекне браву али тренутно закључавање преузима друга нит. Нит ће се померити из блокираног стања у стање покретања када стекне закључавање.
  4. Стање чекања : Нит ће бити у стању чекања када позива чекај() метода или придружи се () методом. Прећи ће у стање покретања када друга нит обавести или ће та нит бити прекинута.
  5. Временско чекање : Нит лежи у временском стању чекања када је позива методу са параметром временског ограничења . Нит лежи у овом стању док се не заврши временско ограничење или док се не прими обавештење. На пример, када нит позове стање спавања или условно чекање, она се премешта у временски ограничено стање чекања.
  6. Прекинуто стање: Нит се прекида из неког од следећих разлога: 
    • Зато што излази нормално. Ово се дешава када програм у потпуности изврши код нити.
    • Зато што се десио неки необичан погрешан догађај као што је грешка сегментације или необрађени изузетак.

Стања нити у Јави

У Јави да бисте добили тренутно стање нити користите Тхреад.гетСтате() метод за добијање тренутног стања нити. Јава пружа јава.ланг.Тхреад.Стате енум који дефинише ЕНУМ константе за стање нити као резиме који је дат у наставку: 

1. Ново 

Стање нити за нит која још није започела. 

јава број у стринг

публиц статиц финал Тхреад.Стате НОВО

2. Руннабле 

Стање нити за покренуту нит. Нит у стању покретања се извршава у Јава виртуелној машини, али можда чека на друге ресурсе из оперативног система као што је процесор. 

публиц статиц финал Тхреад.Стате РУННАБЛЕ

3. Блокирано 

Стање нити за блокирану нит која чека на закључавање монитора. Нит у блокираном стању чека да закључавање монитора уђе у синхронизовани блок/метод или поново уђе у синхронизовани блок/метод након позива Објецт.ваит(). 

публиц статиц финал Тхреад.Стате БЛОЦКЕД

интерфејс у ​​јава

4. Чекање 

 Стање нити за нит која чека. Нит је у стању чекања због позивања једног од следећих метода: 

  • Објецт.ваит без временског ограничења
  • Тхреад.јоин без временског ограничења
  • ЛоцкСуппорт.парк

публиц статиц финал Тхреад.Стате ВАИТИНГ

5. Временско чекање 

Стање нити за нит на чекању са одређеним временом чекања. Нит је у временском стању чекања због позивања једног од следећих метода са наведеним позитивним временом чекања: 

  • Тхреад.слееп
  • Објецт.ваит витх тимеоут
  • Тхреад.јоин витх тимеоут
  • ЛоцкСуппорт.паркНанос
  • ЛоцкСуппорт.паркУнтил

публиц статиц финал Тхреад.Стате ТИМЕД_ВАИТИНГ

6. Прекинут 

Стање нити за прекинуту нит. Нит је завршио извршење. 

публиц статиц финал Тхреад.Стате ТЕРМИНАТЕД


Пример демонстрирања стања нити

Испод је пример из стварног света система за резервацију карата који показује различита стања нити:

Пример:

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


покривеност изјава

Излаз:

Излаз' loading='lazy' title=


Објашњење:

  • Када се креира нова нит, нит је у стању НОВО. Када се метода старт() позове на нити, планер нити је премешта у стање Руннабле.
  • Кад год се метода јоин() позове на инстанци нити, главна нит иде у Чекање да се нит за резервацију заврши.
  • Када се метода покретања нити заврши, њено стање постаје Завршено.
Креирај квиз