Жизнен цикъл и състояния на нишка в Java

Жизнен цикъл и състояния на нишка в Java

А резба в Java може да съществува във всяко едно от следните състояния по всяко време. Нишката се намира само в едно от показаните състояния във всеки момент:

  1. Нова държава
  2. Runnable State
  3. Блокирано състояние
  4. Чакащо състояние
  5. Времево състояние на изчакване
  6. Прекратено състояние

Диаграмата по-долу представя различни състояния на нишка във всеки момент:

Жизнен цикъл-и-състояния-на-нишка-в-Java




Жизнен цикъл на нишка 

Има множество състояния на нишката в един жизнен цикъл, както е споменато по-долу:

  1. Нова тема: Когато се създаде нова нишка, тя е в ново състояние . Нишката все още не е започнала да се изпълнява, когато нишката е в това състояние. Когато една нишка е в ново състояние, нейният код все още не се изпълнява и не е започнал да се изпълнява.
  2. Runnable State : Нишка, която е готов за бягане се премества в състояние на работа. В това състояние дадена нишка може действително да се изпълнява или да е готова за изпълнение във всеки един момент. Отговорност на планировчика на нишки е да даде време на нишката да се изпълни. Многонишкова програма разпределя фиксирано време за всяка отделна нишка. Всяка нишка получава малко време за изпълнение. След като работи за известно време, една нишка спира и се отказва от процесора, така че другите нишки да могат да работят.
  3. блокиран: Нишката ще бъде в блокирано състояние когато се опитва да получи заключване но в момента заключването се придобива от другата нишка. Нишката ще се премести от блокирано състояние в изпълняващо се състояние, когато придобие заключването.
  4. Състояние на изчакване : Нишката ще бъде в състояние на изчакване когато извика wait() метод или присъедини се () метод. Той ще премине в състояние на изпълнение, когато друга нишка уведоми или тази нишка бъде прекратена.
  5. Изчакване с време : нишка се намира в състояние на изчакване във времето, когато тя извиква метод с параметър за изчакване . Нишката е в това състояние, докато не изтече времето за изчакване или докато не бъде получено известие. Например, когато нишка извиква заспиване или условно изчакване, тя се премества в състояние на изчакване с време.
  6. Прекратено състояние: Нишка прекратява поради една от следните причини: 
    • Защото излиза нормално. Това се случва, когато кодът на нишката е бил изцяло изпълнен от програмата.
    • Тъй като е възникнало някакво необичайно погрешно събитие като грешка в сегментирането или необработено изключение.

Състояния на нишка в Java

В Java, за да получите текущото състояние на нишката, използвайте Thread.getState() метод за получаване на текущото състояние на нишката. Java предоставя java.lang.Thread.State enum, който дефинира ENUM константите за състоянието на нишка, като обобщение на това е дадено по-долу: 

1. Ново 

Състояние на нишка за нишка, която все още не е започнала. 

public static final Thread.State НОВО

2. Работещи 

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

публичен статичен окончателен Thread.State RUNNABLE

3. Блокиран 

Състояние на нишка за нишка, блокирана в очакване на заключване на монитора. Нишка в блокирано състояние чака заключване на монитора, за да влезе в синхронизиран блок/метод или да влезе отново в синхронизиран блок/метод след извикване Object.wait(). 

публичен статичен окончателен Thread.State БЛОКИРАН

4. Чакане 

 Състояние на нишка за чакаща нишка. Нишка е в състояние на изчакване поради извикване на един от следните методи: 

  • Object.wait без изчакване
  • Thread.join без таймаут
  • LockSupport.park

public static final Thread.State WAITING

5. Времево изчакване 

Състояние на нишка за чакаща нишка с определено време на изчакване. Нишка е в състояние на изчакване с времеви интервал поради извикване на един от следните методи с определено положително време на изчакване: 

  • Нишка.сън
  • Object.wait с изчакване
  • Thread.join с изчакване
  • LockSupport.parkNanos
  • LockSupport.parkUntil

публичен статичен окончателен Thread.State TIMED_WAITING

6. Прекратено 

Състояние на нишка за прекратена нишка. Нишката завърши изпълнението. 

public static final Thread.State ПРЕКРАТЕН


Пример за демонстриране на състояния на нишка

По-долу е пример от реалния свят на система за резервация на билети, която демонстрира различни състояния на нишка:

Пример:

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


Изход:

Изход


Обяснение:

  • Когато се създаде нова нишка, нишката е в състояние НОВО. Когато методът start() се извика на нишка, планировчикът на нишки го премества в състояние Runnable.
  • Всеки път, когато методът join() се извика на екземпляр на нишка, основната нишка отива в Изчакване за завършване на нишката за резервация.
  • След като методът за изпълнение на нишката завърши, състоянието й става Прекратено.
Създаване на тест

Топ Статии

Категория

Интересни Статии