Daemon iş parçacığı, program yürütmeyi bitirdiğinde JVM'nin çıkmasını engellemeyen, düşük öncelikli bir arka plan iş parçacığıdır.
- Daemon iş parçacıkları, kullanıcı iş parçacıklarını desteklemek için arka planda çalışır.
- Tüm kullanıcı (arka plan programı olmayan) iş parçacıkları tamamlandığında JVM otomatik olarak çıkar.
- Aynı Thread sınıfı kullanılarak oluşturulurlar ancak setDaemon(true) yöntemi kullanılarak daemon olarak işaretlenirler.
- İş parçacığı başlamadan önce setDaemon(true) yönteminin çağrılması gerekir.
- Yaygın örnekler arasında Çöp Toplayıcı ve Sonlandırıcı İş Parçacığı yer alır.
Sözdizimi
Javathread.setDaemon(true);
Kullanım Durumları
- Çöp Toplama: Java'daki Çöp Toplayıcı (GC), bir daemon iş parçacığı olarak çalışır.
- Arka Plan İzleme: Daemon iş parçacıkları uygulama bileşeni kaynaklarının veya bağlantılarının durumunu izleyebilir.
- Loglama ve Denetleme Hizmetleri: Daemon iş parçacıkları arka plan etkinliklerini sürekli olarak günlüğe kaydetmek için kullanılabilir.
- Temizleme İşlemleri: Daemon iş parçacıkları geçici dosyaları periyodik olarak temizleyebilir, kullanılmayan kaynakları serbest bırakabilir veya önbellek temizliği gerçekleştirebilir.
- Zamanlayıcı veya Zamanlayıcı Görevleri: Arka plan zamanlayıcıları genellikle görevleri sabit aralıklarla tetiklemek için daemon iş parçacıklarını kullanır.
Kullanılan Yöntemler
- void setDaemon(boolean açık): Bir iş parçacığını arka plan programı veya kullanıcı iş parçacığı olarak işaretler. Start()'tan önce çağrılmalıdır.
- Boolean isDaemon(): Bir iş parçacığının daemon olup olmadığını kontrol eder.
Daemon Konusu Oluşturma
Javapublic class DaemonExample extends Thread { public void run() { if (Thread.currentThread().isDaemon()) { System.out.println('Daemon thread running...'); } else { System.out.println('User thread running...'); } } public static void main(String[] args) { DaemonExample t1 = new DaemonExample(); DaemonExample t2 = new DaemonExample(); t1.setDaemon(true); // must be set before start() t1.start(); t2.start(); } }
Çıkış
Daemon thread running... User thread running...
Daemon Thread'in Davranışı
Javapublic class DaemonBehavior extends Thread { public void run() { while (true) { System.out.println('Daemon thread running...'); } } public static void main(String[] args) { DaemonBehavior t = new DaemonBehavior(); t.setDaemon(true); t.start(); System.out.println('Main (user) thread ends...'); } }
Çıkış
Main (user) thread ends...
JVM, daemon iş parçacığı hala çalışıyor olsa bile ana iş parçacığı bittikten hemen sonra sona erer.
Önemli Notlar
- Bir iş parçacığı, kendisini oluşturan iş parçacığının daemon durumunu devralır.
- setDaemon(true) yöntemi, start() işleminden sonra çağrılırsa IllegalThreadStateException oluşturur.
- Daemon iş parçacıkları, bir dosyaya yazma veya veritabanını güncelleme gibi tamamlanması gereken görevler için kullanılmamalıdır.
- JVM, temizleme işlemleri gerçekleştirmeden tüm daemon iş parçacıklarını aniden sonlandırır.
Kullanıcı Konusu ile Daemon Konusu Arasındaki Fark
| Temel | Kullanıcı Konusu | Daemon Konusu |
|---|---|---|
| Amaç | Ana uygulama görevlerini yürütür | Arka plan hizmetlerini gerçekleştirir |
| Yaşam döngüsü | JVM'yi bitene kadar canlı tutar | Tüm kullanıcı iş parçacıkları bittiğinde sona erer |
| Öncelik | Genellikle daha yüksek | Genellikle daha düşük |
| JVM Çıkışı | JVM tamamlanmayı bekliyor | JVM çalışıyor olsa bile çıkıyor |
| Örnekler | Ana iş parçacığı çalışan iş parçacıkları | Çöp toplayıcı arka plan monitörleri |