logo

Java'da Bir İş Parçacığının Yaşam Döngüsü ve Durumları

A iplik Java'da herhangi bir zamanda aşağıdaki durumlardan herhangi birinde bulunabilir. Bir iş parçacığı herhangi bir anda gösterilen durumlardan yalnızca birinde bulunur:

  1. Yeni Durum
  2. Çalıştırılabilir Durum
  3. Engellenmiş Durum
  4. Bekleme Durumu
  5. Zamanlanmış Bekleme Durumu
  6. Feshedilmiş Durum

Aşağıdaki şema bir iş parçacığının herhangi bir andaki çeşitli durumlarını temsil etmektedir:

Java'da Bir İş Parçacığının Yaşam Döngüsü ve Durumları' title=




Bir Konunun Yaşam Döngüsü 

Aşağıda belirtildiği gibi bir yaşam döngüsünde iş parçacığının birden fazla durumu vardır:

  1. Yeni Konu: Yeni bir iş parçacığı oluşturulduğunda, bu yeni durum . İş parçacığı bu durumdayken iş parçacığı henüz çalışmaya başlamamıştır. Bir iş parçacığı yeni durumda olduğunda, kodu henüz çalıştırılmamış ve yürütülmeye başlamamıştır.
  2. Çalıştırılabilir Durum : Bir iplik koşmaya hazır çalıştırılabilir bir duruma taşınır. Bu durumda bir iş parçacığı gerçekten çalışıyor olabilir veya herhangi bir zamanda çalışmaya hazır olabilir. İş parçacığına çalışması için zaman vermek iş parçacığı zamanlayıcısının sorumluluğundadır. Çok iş parçacıklı bir program, her bir iş parçacığına sabit bir süre ayırır. Her iş parçacığının çalışması için küçük bir süre vardır. Bir süre çalıştıktan sonra bir iş parçacığı duraklar ve diğer iş parçacıklarının çalışabilmesi için CPU'yu bırakır.
  3. Engellendi: Konu engellenmiş durumda olacak bir kilit almaya çalışırken ancak şu anda kilit diğer iş parçacığı tarafından elde ediliyor. İş parçacığı, kilidi aldığında engellenen durumdan çalıştırılabilir duruma geçecektir.
  4. Bekleme durumu : İş parçacığı bekleme durumunda olacak wait() öğesini çağırdığında yöntem veya katılmak() Yöntem. Diğer iş parçacığı bilgilendirildiğinde veya iş parçacığı sonlandırıldığında çalıştırılabilir duruma geçecektir.
  5. Zamanlanmış Bekleme : Bir iş parçacığı zamanlanmış bekleme durumundadır. time-out parametreli bir yöntemi çağırır . Zaman aşımı tamamlanana veya bir bildirim alınana kadar bir iş parçacığı bu durumda kalır. Örneğin, bir iş parçacığı uyku veya koşullu beklemeyi çağırdığında, zamanlanmış bekleme durumuna taşınır.
  6. Sonlandırılmış Durum: Bir iş parçacığı aşağıdaki nedenlerden biri nedeniyle sonlandırılır: 
    • Çünkü normal bir şekilde çıkıyor. Bu, iş parçacığının kodu program tarafından tamamen yürütüldüğünde gerçekleşir.
    • Çünkü segmentasyon hatası veya işlenmeyen bir istisna gibi olağandışı hatalı bir olay meydana geldi.

Java'da Konu Durumları

Java'da iş parçacığının mevcut durumunu almak için kullanın Thread.getState() iş parçacığının mevcut durumunu alma yöntemi. Java şunları sağlar java.lang.Thread.State Özeti aşağıda verilen bir iş parçacığının durumu için ENUM sabitlerini tanımlayan enum: 

1. Yeni 

Henüz başlamamış bir iş parçacığının iş parçacığı durumu. 

örneklenmiş java

public static final Thread.State YENİ

2. Çalıştırılabilir 

Çalıştırılabilir bir iş parçacığının iş parçacığı durumu. Çalıştırılabilir durumdaki bir iş parçacığı Java sanal makinesinde yürütülüyor ancak işletim sisteminden işlemci gibi diğer kaynakları bekliyor olabilir. 

public static final Thread.State ÇALIŞTIRILABİLİR

3. Engellendi 

Monitör kilidini bekleyen engellenen bir iş parçacığının iş parçacığı durumu. Engellenmiş durumdaki bir iş parçacığı, monitör kilidinin senkronize bir bloğa/yönteme girmesini veya çağırdıktan sonra senkronize bir bloğa/yönteme yeniden girmesini bekliyor Object.wait(). 

Shilpa Shetty'nin yaşı

public static final Thread.State BLOCKED

4. Bekliyor 

 Bekleyen bir iş parçacığının iş parçacığı durumu. Bir iş parçacığı aşağıdaki yöntemlerden birini çağırdığı için bekleme durumundadır: 

  • Object.wait zaman aşımı olmadan
  • Konu.birleştirme zaman aşımı olmadan
  • KilitSupport.park

public static final Thread.State BEKLİYOR

5. Zamanlı Bekleme 

Belirtilen bekleme süresine sahip bekleyen bir iş parçacığının iş parçacığı durumu. Bir iş parçacığı, aşağıdaki yöntemlerden birinin belirtilen pozitif bekleme süresiyle çağrılması nedeniyle zamanlanmış bekleme durumundadır: 

  • Konu.uyku
  • Object.wait ile zaman aşımı
  • Thread.join zaman aşımı ile
  • LockSupport.parkNano'lar
  • LockSupport.parkUntil

genel statik son Konu.Durum TIMED_WAITING

6. Feshedildi 

Sonlandırılmış bir iş parçacığının iş parçacığı durumu. İş parçacığı yürütmeyi tamamladı. 

public static final Thread.State SONLANDIRILDI


İş Parçacığı Durumlarını Gösterme Örneği

Aşağıda farklı ileti dizisi durumlarını gösteren gerçek dünyadan bir bilet rezervasyon sistemi örneği verilmiştir:

Örnek:

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'da dize dizisi oluşturma

Çıkış:

Çıkış' loading='lazy' title=


Açıklama:

  • Yeni bir iş parçacığı oluşturulduğunda iş parçacığı YENİ durumundadır. Bir iş parçacığında start() yöntemi çağrıldığında iş parçacığı zamanlayıcısı onu Çalıştırılabilir duruma taşır.
  • Bir iş parçacığı örneğinde join() yöntemi her çağrıldığında ana iş parçacığı Rezervasyon iş parçacığının tamamlanması bekleniyor durumuna gider.
  • İş parçacığının çalıştırma yöntemi tamamlandığında durumu Sonlandırıldı olur.
Test Oluştur