Java-da ThreadGroup


JavaBaxılıb 148

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-da ThreadGroup

Java-dakı bir ThreadGroup bir qrupu təmsil edir mövzuları və ya mövzu qruplarına aiddir java.lang.ThreadGroup sinif. Bir mövzu qrupunun əsas üstünlüyü ondan ibarətdir ki, tək bir funksiya çağırışı istifadə edərək bütün mövzuları dayandırmaq, davam etdirmək və ya dayandırmaq kimi əməliyyatlar edə bilərik. Bir mövzu qrupundakı hər bir mövzuda ilkin iplik xaricində bir ana ip var və bu səbəbdən bir ağac quruluşunu təmsil edir. Öz mövzu qrupu haqqında bütün məlumatlara daxil ola bilər. ThreadGroup sinfi eyni əməliyyatı bir neçə mövzuda yerinə yetirmək istədiyimiz zaman çox faydalıdır.

Java-da ThreadGroupPin

ThreadGroupun qurucuları

Aşağıda Java-da inşaatçılar Mövzu Qrupu.

konstruktortəsvir
ThreadGroup (Simli ad)Göstərilən adla bir mövzu qrupu yaradır
ThreadGroup (ThreadGroup valideyn, String adı)Göstərilən mövzu qrupu valideyn və adı ilə bir mövzu qrupu yaradır

ThreadGroup metodları

Java-dakı ThreadGroup sinfi müxtəlif əməliyyatları yerinə yetirmək üçün aşağıdakı metodlara malikdir.

Üsultəsvir
int activeCount ()Thread qrupundakı aktiv mövzu sayını qaytarır
int activeGroupCount ()Göstərilən qrupdakı aktiv mövzu qruplarının sayını qaytarır
void checkAccess ()Mövcud mövzuda qrupların girişini dəyişdirmək üçün icazənin olub olmadığını yoxlayır
ləğv etmək ()Mövzu qrupunu məhv edir
int enumerate (Mövzu [] siyahısı)Mövzu qrupundakı hər bir cərgəni göstərilən massivə kopyalayır
int saymaq (ThreadGroup [] siyahısı)Mövzu qrupundakı hər aktiv alt qrupu göstərilən massivə kopyalayır
int sadalamaq (Mövzu [] siyahısı, boolean recurse)Mövzu qrupundakı hər bir cərgəni göstərilən massivə kopyalayır. Təkrarlanma doğrudursa, bu əməliyyatı rekursiv olaraq çağırır
int saymaq (ThreadGroup [] siyahısı, boolean recurse)Mövzu qrupundakı hər aktiv alt qrupu göstərilən massivə kopyalayır. Təkrarlanma doğrudursa, bu əməliyyatı rekursiv olaraq çağırır
int getMaximumPriority ()Mövzu qrupunun maksimum prioritetini qaytarır
String getName ()Mövzu qrupunun adını qaytarır
ThreadGroup getParent ()Mövzu qrupunun əsasını qaytarır
boşluq kəsmək ()Mövzu qrupundakı bütün ipləri kəsir
boolean isDaemon ()Mövzu qrupunun demon olub olmadığını yoxlayır
boolean məhv edilmişdir ()Mövzu qrupunun məhv olub-olmadığını yoxlayır
boş siyahı ()Mövzu qrupu haqqında məlumatları standart çıxış axınına çap edir
boolean parentOf (ThreadGroup tg)Mövzu qrupunun göstərilən mövzu qrupu arqumenti və ya onun əcdad mövzu qrupları olub olmadığını yoxlayır
etibarsız setDaemon (boolean daemon)Mövzu qrupunun demon vəziyyətini təyin edir
etibarsız setMaxPriority (int p)Mövzu qrupu üçün göstərilən maksimum prioriteti təyin edir

Java ThreadGroup metodlarına nümunə:

Bu nümunə, Java-da ThreadGroup sinifinin müxtəlif metodlarından necə istifadə olunacağını göstərir. Qrup1-in Qrup2-nin ana hissəsi olduğu “Qrup1” və “Qrup2” adlı iki ThreadGroup yaratdıq. Aktiv mövzuların sayını almaq üçün istifadə edirik activeCount() üsulu və aktiv mövzu qruplarının sayını almaq üçün istifadə edə bilərik activeGroupCount() metod. GetMaxPriority () maksimumu qaytarır mövcud mövzuların prioriteti. Bu getName() mövzu qrupunun adını alır. Bir mövzu qrupunun, istifadə edərək başqa bir qrupun ana olub olmadığını da yoxlaya bilərik parentOf() metodunu istifadə edin və getParent() metod. The checkAccess() metod, mövzu qruplarının qrup məlumatlarını almaq üçün lazımi icazələrin olub olmadığını yoxlayır. Nəhayət, istifadə edərək mövzu qrupundakı bütün mövzuları sadalaya bilərik list() metodu.

public class ThreadGroupDemo extends Thread {

  public ThreadGroupDemo(String name, ThreadGroup tg) {
    super(tg,name);
  }
  
  public void run() {
    System.out.println("Running " + Thread.currentThread().getName());
  }

  public static void main(String[] args) {
    ThreadGroup tg = new ThreadGroup("Group1");
    ThreadGroup tg1 = new ThreadGroup(tg, "Group2");
  
    
    ThreadGroupDemo t1 = new ThreadGroupDemo("Thread1", tg);
    ThreadGroupDemo t2 = new ThreadGroupDemo("Thread2", tg);
    
    ThreadGroupDemo t3 = new ThreadGroupDemo("Thread3", tg1);
    
    t1.start();
    t2.start();
    t3.start();
    
    System.out.println("Number of active threads: " + tg.activeCount());
    System.out.println("Number of active thread groups: " + tg.activeGroupCount());
    System.out.println("Maximum priority: " + tg.getMaxPriority());
    System.out.println("Thread group name: " + tg.getName());
    System.out.println("Child thread group name: "+ tg1.getName());
    System.out.println(tg.parentOf(tg1));
    System.out.println("Parent thread group: " + tg1.getParent());
    
    tg.checkAccess();
    System.out.println(tg.getName() + " has access");
    
    tg1.checkAccess();
    System.out.println(tg1.getName() + " has access");

    System.out.println("List the information of thread group using the list method: ");
    tg.list();
  }

}
Running Thread3
Running Thread2
Number of active threads: 3
Running Thread1
Number of active thread groups: 1
Maximum priority: 10
Thread group name: Group1
Child thread group name: Group2
true
Parent thread group: java.lang.ThreadGroup[name=Group1,maxpri=10]
Group1 has access
Group2 has access
List the information of thread group using the list method: 
java.lang.ThreadGroup[name=Group1,maxpri=10]
    java.lang.ThreadGroup[name=Group2,maxpri=10]

Misal: destroy () metodu - Java ThreadGroup

Bu nümunə Java-da bir mövzu qrupunu destroy() üsulu istifadə edərək məhv olub olmadığını yoxlayın isDestroyed() metod. Mövzu qrupunu məhv etməzdən əvvəl mövzuların icrası başa çatana qədər gözləməliyik, əks halda bir InterruptException atacaq. Bunun üçün join() Mövzu sinifinin metodu.

public class ThreadGroupEx extends Thread{

  public ThreadGroupEx(ThreadGroup tg, String name) {
    super(tg,name);
  }
  
  public void run() {
    System.out.println(Thread.currentThread().getName() + " is running");
  }

  public static void main(String[] args) throws InterruptedException {
    ThreadGroup tg = new ThreadGroup("Group1");
    
    ThreadGroupEx t1 = new ThreadGroupEx(tg, "Thread1");
    ThreadGroupEx t2 = new ThreadGroupEx(tg, "Thread2");
    t1.start();
    t2.start();
    
    t1.join();
    t2.join();
    
    tg.destroy();
    System.out.println(tg.getName() + " destroyed");
    System.out.println("Is thread group destroyed: " + tg.isDestroyed());

  }

}
Thread2 is running
Thread1 is running
Group1 destroyed
Is thread group destroyed: true

Nümunə: interrupt () metodu - Java ThreadGroup

Bu, istifadə edərək bir mövzu qrupunu kəsməyə bir nümunədir interrupt() metodu.

public class InterruptThread extends Thread{

  public InterruptThread(ThreadGroup tg, String name) {
    super(tg,name);
  }
  
  public void run() {
    System.out.println(Thread.currentThread().getName() + " is running");
  }

  public static void main(String[] args) {
    ThreadGroup tg = new ThreadGroup("Group1");
    
    InterruptThread t1 = new InterruptThread(tg,"Thread1");
    t1.start();
    
    t1.interrupt();
    System.out.println(tg.getName() + " interrupted");
  
  }

}
Group1 interrupted
Thread1 is running

Misal: enumerate () metodu - Java ThreadGroup

Bu nümunədə mövzuları bir -ə necə kopyalayacağımızı görə bilərik array sadalamaq () metodundan istifadə etməklə. Burada 2 mövzu yaradırıq və onları massivə köçürürük və for loop istifadə edərək mövzu adlarını çap edirik.

public class EnumerateThreadDemo extends Thread {

  public EnumerateThreadDemo(ThreadGroup tg, String name) {
    super(tg, name);
  }
  
  public void run() {
    System.out.println(Thread.currentThread().getName() + " is running");
  }

  public static void main(String[] args) {
    ThreadGroup tg = new ThreadGroup("Group1");
    

    EnumerateThreadDemo t1 = new EnumerateThreadDemo(tg, "Thread1");
    EnumerateThreadDemo t2 = new EnumerateThreadDemo(tg, "Thread2");
    
    t1.start();
    t2.start();
    
    Thread[] tarr = new Thread[tg.activeCount()];
    int cnt = tg.enumerate(tarr);
    
    for(int i=0;i<cnt;i++)
      System.out.println(tarr[i].getName());
  }

}
Thread1
Thread2
Thread1 is running
Thread2 is running

Aşağıda başqa bir nümunə var enumerate() üsulu təyin etdiyimiz zaman resurse parametr doğrudur. Bu vəziyyətdə, uşaq iplik qrupları vasitəsilə də müraciət edir. Həm də ipi3 yazdırmasının səbəbi budur.

public class EnumerateThreadDemo extends Thread {

  public EnumerateThreadDemo(ThreadGroup tg, String name) {
    super(tg, name);
  }
  
  public void run() {
    System.out.println(Thread.currentThread().getName() + " is running");
  }

  public static void main(String[] args) {
    ThreadGroup tg = new ThreadGroup("Group1");
    ThreadGroup tg1 = new ThreadGroup(tg,"Group2");

    EnumerateThreadDemo t1 = new EnumerateThreadDemo(tg, "Thread1");
    EnumerateThreadDemo t2 = new EnumerateThreadDemo(tg, "Thread2");
    EnumerateThreadDemo t3 = new EnumerateThreadDemo(tg1, "Thread3");
    
    t1.start();
    t2.start();
    t3.start();
    
    Thread[] tarr = new Thread[tg.activeCount()];
    int cnt = tg.enumerate(tarr, true);
    
    for(int i=0;i<cnt;i++)
      System.out.println(tarr[i].getName());
  }

}
Thread1
Thread2
Thread3
Thread1 is running
Thread2 is running
Thread3 is running

Biz də istifadə edə bilərik enumerate() Aşağıdakı nümunədə gördüyümüz kimi mövzu qruplarını bir massivə kopyalamaq metodu. Bu vəziyyətdə, uşaq iplik qruplarını bir sıra halına gətirir.

public class EnumerateThreadDemo extends Thread {

  public EnumerateThreadDemo(ThreadGroup tg, String name) {
    super(tg, name);
  }
  
  public void run() {
    System.out.println(Thread.currentThread().getName() + " is running");
  }

  public static void main(String[] args) {
    ThreadGroup tg = new ThreadGroup("Group1");
    ThreadGroup tg1 = new ThreadGroup(tg,"Group2");

    EnumerateThreadDemo t1 = new EnumerateThreadDemo(tg, "Thread1");
    EnumerateThreadDemo t2 = new EnumerateThreadDemo(tg, "Thread2");
    EnumerateThreadDemo t3 = new EnumerateThreadDemo(tg1, "Thread3");
    
    t1.start();
    t2.start();
    t3.start();
    
    ThreadGroup[] tgarr = new ThreadGroup[tg.activeCount()];
    int cnt = tg.enumerate(tgarr,true);
    for(int i=0;i<cnt;i++)
      System.out.println(tgarr[i].getName());
  }

}
Group2
Thread3 is running
Thread1 is running
Thread2 is running

 

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
1