А резба в Java може да съществува във всяко едно от следните състояния по всяко време. Нишката се намира само в едно от показаните състояния във всеки момент:
- Нова държава
- Runnable State
- Блокирано състояние
- Чакащо състояние
- Времево състояние на изчакване
- Прекратено състояние
Диаграмата по-долу представя различни състояния на нишка във всеки момент:

Жизнен цикъл на нишка
Има множество състояния на нишката в един жизнен цикъл, както е споменато по-долу:
- Нова тема: Когато се създаде нова нишка, тя е в ново състояние . Нишката все още не е започнала да се изпълнява, когато нишката е в това състояние. Когато една нишка е в ново състояние, нейният код все още не се изпълнява и не е започнал да се изпълнява.
- Runnable State : Нишка, която е готов за бягане се премества в състояние на работа. В това състояние дадена нишка може действително да се изпълнява или да е готова за изпълнение във всеки един момент. Отговорност на планировчика на нишки е да даде време на нишката да се изпълни. Многонишкова програма разпределя фиксирано време за всяка отделна нишка. Всяка нишка получава малко време за изпълнение. След като работи за известно време, една нишка спира и се отказва от процесора, така че другите нишки да могат да работят.
- блокиран: Нишката ще бъде в блокирано състояние когато се опитва да получи заключване но в момента заключването се придобива от другата нишка. Нишката ще се премести от блокирано състояние в изпълняващо се състояние, когато придобие заключването.
- Състояние на изчакване : Нишката ще бъде в състояние на изчакване когато извика wait() метод или присъедини се () метод. Той ще премине в състояние на изпълнение, когато друга нишка уведоми или тази нишка бъде прекратена.
- Изчакване с време : нишка се намира в състояние на изчакване във времето, когато тя извиква метод с параметър за изчакване . Нишката е в това състояние, докато не изтече времето за изчакване или докато не бъде получено известие. Например, когато нишка извиква заспиване или условно изчакване, тя се премества в състояние на изчакване с време.
- Прекратено състояние: Нишка прекратява поради една от следните причини:
- Защото излиза нормално. Това се случва, когато кодът на нишката е бил изцяло изпълнен от програмата.
- Тъй като е възникнало някакво необичайно погрешно събитие като грешка в сегментирането или необработено изключение.
Състояния на нишка в Java
В Java, за да получите текущото състояние на нишката, използвайте Thread.getState() метод за получаване на текущото състояние на нишката. Java предоставя java.lang.Thread.State enum, който дефинира ENUM константите за състоянието на нишка, като обобщение на това е дадено по-долу:
1. Ново
Състояние на нишка за нишка, която все още не е започнала.
научете селен
public static final Thread.State НОВО
2. Работещи
Състояние на нишка за изпълняваема нишка. Нишка в състояние на изпълнение се изпълнява във виртуалната машина на Java, но може да чака други ресурси от операционната система, като например процесор.
публичен статичен окончателен Thread.State RUNNABLE
програма за наследяване в python
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() се извика на екземпляр на нишка, основната нишка отива в Изчакване за завършване на нишката за резервация.
- След като методът за изпълнение на нишката завърши, състоянието й става Прекратено.