Java-da Daemon Mövzusu


Daemon Java SapBaxılıb 33

Əvvəlki məqalələrdə istifadəçi ilə əlaqəli müxtəlif mövzular gördük mövzuları. Bu yazıda, Java-dəki daimon mövzuları, onların istifadəsi, metodları ilə nümunələri başa düşəcəyik və daemon thread ilə user thread arasında fərqləri görəcəyik.

Java Daemon mövzu

Java-da Daemon MövzusuPin

Java-da Daemon mövzu, arxa planda işləyən və istifadəçi mövzu prosesini dəstəkləyən sistem tərəfindən yaradılan bir mövzu. Prioriteti azdır və zibil toplama, sonlandırıcı və s. Kimi işləri yerinə yetirir. Avtomatik olaraq işləyir və ayrıca çağırmağımız lazım deyil. Daemon iş parçacığının ömrü istifadəçi ipindən asılıdır, yəni istifadəçi ipi bitdikdə, JVM avtomatik olaraq demon ipliklərini dayandırır və daim ipinin tamamlanmasını gözləmir.

Bir iplik icrasına başladıqda, valideynin iş parçasının daemon statusunu alır. Bunun səbəbi budur main Java-dakı iplik işləyən bir mövzu deyil və yaratdığımız bütün mövzular uşaq mövzularıdır. Varsayılan olaraq, bu uşaq mövzuları daemon deyil.

Daemon ipinin metodları

Daemon sapı bir sistem tərəfindən yaradılan bir mövzu olmasına baxmayaraq, yeni bir mövzu bir daemon olaraq təyin etmək və eyni zamanda bir mövzu bir daemon olub olmadığını yoxlamaq mümkündür.

Aşağıda Java-da daemon mövzularının fərqli üsulları verilmişdir.

Üsultəsvir
etibarsız setDaemon (boole vəziyyəti)Mövcud ipliyi bir istifadəçi ipi və ya bir işçi ipi olaraq təyin edir. Vəziyyət doğrudursa, bir daemon sapı, yalnış olarsa, istifadəçi mövzusu olaraq təyin edir
boolean isDaemon ()Mövcud mövzu bir daemon mövzu və ya bir istifadəçi mövzu olub olmadığını yoxlayır.
Bir deemon sapı olduqda true qaytarır, əks halda false qaytarır.

misal

Aşağıdakı nümunə işin göstəricisidir setDaemon() metod və isDaemon() Java-da bir Daemon mövzu üsulları. Run () metodunda ipin istifadəçi və ya daemon mövzu olduğunu yoxlayırıq isDaemon() metod. Bir daemon thread olduqda metod true qaytarır, əks halda false qaytarır. Mövcud ipliyi bir .emon kimi qura bilərik setDaemon() çağırmadan əvvəl metod start() metod. Parametr bir istifadəçi ipi hesab etdiyi başqa bir daemon thread olaraq təyin etmək üçün doğru olmalıdır. Beləliklə, d1 bir işləyən mövzu və d2, d3 istifadəçi mövzularıdır.

public class DaemonThreadDemo extends Thread {
  String name;
  public void run() {
  
    name = Thread.currentThread().getName();
    if(Thread.currentThread().isDaemon())
      System.out.println(name + " is a daemon thread");
    else
      System.out.println(name + " is a user thread");
  }

  public static void main(String[] args) {
    DaemonThreadDemo d1 = new DaemonThreadDemo();
    DaemonThreadDemo d2 = new DaemonThreadDemo();
    DaemonThreadDemo d3 = new DaemonThreadDemo();
    
    d1.setDaemon(true);
    
    d1.start();
    d2.start();
    
    d3.setDaemon(false);
    d3.start();
  }

}
Thread-2 is a user thread
Thread-1 is a user thread
Thread-0 is a daemon thread

İstisnalar

Java'dakı Daemon mövzuları da müəyyən şərtlərdə istisnalar atır. Tutaq ki, bir ipi bir demon sapı kimi qurmağa çalışırıq və ya çağırırıq setDaemon() iplik başladıqdan sonra üsul atacaq QanunsuzThreadStateException. Beləliklə, hər zaman istifadə edə bilərik setDaemon() üsulu yalnız çağırmadan əvvəl start() metodu.

Məsələn, aşağıdakı Java kodu ilə nəticələnəcəkdir istisna mövzu icrasına başladıqdan sonra ipi bir demon sapı kimi təyin etməyə çalışdığımız üçün.

public class DaemonException extends Thread {

  public void run() {
    System.out.println("Thread running");
  }
  public static void main(String[] args) {
    DaemonException d1 = new DaemonException();
    DaemonException d2 = new DaemonException();
    
    d1.start();
    
    d1.setDaemon(true); //Exception
    
    d2.start();

  }

}
Thread running
Exception in thread "main" java.lang.IllegalThreadStateException
  at java.base/java.lang.Thread.setDaemon(Thread.java:1402)
  at DaemonException.main(DaemonException.java:12)

Daemon thread və İstifadəçi mövzuları

Ən çox bu tez-tez soruşulan müsahibə sualı in çox oxlu Java-da. Aşağıda daemon sapı ilə istifadəçi ipi arasındakı əsas fərqlər verilmişdir.

İstifadəçi mövzuDaemon sapı
Yüksək prioritetli mövzuAşağı prioritetli mövzu
Ön planda çalışırArxa fonda işləyir
Xüsusi kompleks tapşırığı yerinə yetirirDəstəkləyici tapşırığı yerinə yetirir
JVM hər zaman aktiv istifadəçi mövzularının bağlanmadan əvvəl tamamlanmasını gözləyirJVM, işdən çıxmadan əvvəl işləmə mövzularının tamamlanmasını gözləmir
Bəzi tapşırıqların icrası üçün Java tətbiqi tərəfindən yaradılıbJVM tərəfindən hazırlanmışdır
MüstəqildirBu istifadəçi mövzularına bağlıdır

nəticə

Bu təlimatda Java-da bir Daemon sapının nə olduğunu, bir ipi necə bir daemon sapı kimi quracağımızı və cari ipliyin bir daemon və ya istifadəçi mövzu olduğunu yoxladıq. Daemon mövzu metodlarının səhv istifadəsi səbəbindən yarana biləcək istisnanı da gördük. Sonda daemon və istifadəçi mövzuları arasındakı əsas fərqləri müzakirə etdik.

arayış

Şərh yaz

Translate »
1