Die ThreadGroup-Klasse wird in Java zur Darstellung einer Thread-Gruppe verwendet, die eine Sammlung von Threads darstellt und einen Stapel von Threads und Thread-Gruppen verwalten kann. Threads können einer bestimmten Thread-Gruppe zugeordnet werden. Es können Thread-Objekte in der Thread-Gruppe vorhanden sein, und es können auch Threads in der Gruppe vorhanden sein. Diese Organisationsstruktur ähnelt in gewisser Weise der Form eines Baums. wie in der Abbildung gezeigt.
Alle vom Benutzer erstellten Threads gehören zur angegebenen Thread-Gruppe. Wenn keine Thread-Gruppe explizit angegeben wird, gehört der Thread zur Standard-Thread-Gruppe (dh zur Haupt-Thread-Gruppe). Standardmäßig befinden sich der untergeordnete Thread und der übergeordnete Thread in derselben Thread-Gruppe.
Darüber hinaus kann die Thread-Gruppe, zu der ein Thread gehört, nur beim Erstellen angegeben werden. Die Thread-Gruppe, zu der ein Thread gehört, kann nicht geändert werden, während der Thread ausgeführt wird kann nach der Angabe nicht mehr geändert werden.
1.Sicherheit
Threads in derselben Thread-Gruppe können die Daten des anderen ändern. Wenn sie sich jedoch in verschiedenen Thread-Gruppen befinden, können die Daten nicht „über Thread-Gruppen hinweg“ geändert werden und die Datensicherheit kann bis zu einem gewissen Grad gewährleistet werden.
2. Chargenverwaltung
Threads oder Thread-Gruppenobjekte können stapelweise verwaltet werden, um Threads oder Thread-Gruppenobjekte effektiv zu organisieren oder zu steuern.
3. Beispiel für die Verwendung einer Thread-Gruppe
1. Thread-Assoziations-Thread-Gruppe: Assoziation der ersten Ebene
Die sogenannte First-Level-Assoziation bedeutet, dass das übergeordnete Objekt über untergeordnete Objekte verfügt, jedoch keine untergeordneten Objekte erstellt werden. Erstellen Sie beispielsweise eine Thread-Gruppe und weisen Sie dann die erstellten Threads der Gruppe zu, um diese Threads effektiv zu verwalten. Das Codebeispiel lautet wie folgt:
public class ThreadGroupTest { public static void main(String[] args) { ThreadGroup rootThreadGroup = new ThreadGroup("root线程组"); Thread thread0 = new Thread(rootThreadGroup, new MRunnable(), "线程A"); Thread thread1 = new Thread(rootThreadGroup, new MRunnable(), "线程B"); thread0.start(); thread1.start(); } } class MRunnable implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { System.out.println("线程名: " + Thread.currentThread().getName() + ", 所在线程组: " + Thread.currentThread().getThreadGroup().getName()) ; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } 复制代码
Die Ausführungsergebnisse lauten wie folgt:
线程名: 线程A, 所在线程组: root线程组 线程名: 线程B, 所在线程组: root线程组 复制代码
2. Thread-Assoziations-Thread-Gruppe: mehrstufige Assoziation
Die sogenannte mehrstufige Zuordnung bedeutet, dass das übergeordnete Objekt untergeordnete Objekte hat und das Erstellen eines untergeordneten Objekts im untergeordneten Objekt die Wirkung von Nachkommen hat. Verwenden Sie beispielsweise die zweite Konstruktionsmethode in der folgenden Abbildung, um die Unter-Thread-Gruppe einer bestimmten Thread-Gruppe zuzuordnen, und weisen Sie dann den erstellten Thread der Unter-Thread-Gruppe zu. Dies hat den Effekt eines Thread-Baums.
Das Codebeispiel lautet wie folgt:
public class ThreadGroupTest { public static void main(String[] args) { ThreadGroup rootThreadGroup = new ThreadGroup("root线程组"); Thread thread0 = new Thread(rootThreadGroup, new MRunnable(), "线程A"); Thread thread1 = new Thread(rootThreadGroup, new MRunnable(), "线程B"); thread0.start(); thread1.start(); ThreadGroup threadGroup1 = new ThreadGroup(rootThreadGroup, "子线程组"); Thread thread2 = new Thread(threadGroup1, new MRunnable(), "线程C"); Thread thread3 = new Thread(threadGroup1, new MRunnable(), "线程D"); thread2.start(); thread3.start(); } } class MRunnable implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { System.out.println("线程名: " + Thread.currentThread().getName() + ", 所在线程组: " + Thread.currentThread().getThreadGroup().getName() + ", 父线程组: " + Thread.currentThread().getThreadGroup().getParent().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } 复制代码
Die Ausführungsergebnisse lauten wie folgt:
线程名: 线程A, 所在线程组: root线程组, 父线程组: main 线程名: 线程B, 所在线程组: root线程组, 父线程组: main 线程名: 线程C, 所在线程组: 子线程组, 父线程组: root线程组 线程名: 线程D, 所在线程组: 子线程组, 父线程组: root线程组 复制代码
3. Stapelverwaltung von Threads in der Gruppe
Natürlich erfordert die Verwendung einer Thread-Gruppe eine Batch-Verwaltung von Threads in der Gruppe. Das Codebeispiel lautet wie folgt:
rrreeDie Ausführungsergebnisse sind wie folgt:
public class ThreadGroupTest { public static void main(String[] args) { ThreadGroup rootThreadGroup = new ThreadGroup("root线程组"); Thread thread0 = new Thread(rootThreadGroup, new MRunnable(), "线程A"); Thread thread1 = new Thread(rootThreadGroup, new MRunnable(), "线程B"); thread0.start(); thread1.start(); ThreadGroup threadGroup1 = new ThreadGroup(rootThreadGroup, "子线程组"); Thread thread2 = new Thread(threadGroup1, new MRunnable(), "线程C"); Thread thread3 = new Thread(threadGroup1, new MRunnable(), "线程D"); thread2.start(); thread3.start(); rootThreadGroup.interrupt(); System.out.println("批量中断组内线程"); } } class MRunnable implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { System.out.println("线程名: " + Thread.currentThread().getName() + ", 所在线程组: " + Thread.currentThread().getThreadGroup().getName() + ", 父线程组: " + Thread.currentThread().getThreadGroup().getParent().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); break; } } System.out.println(Thread.currentThread().getName() + "执行结束"); } } 复制代码
Das obige ist der detaillierte Inhalt vonBeispiele und Methoden zur Verwendung von Thread-Gruppen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!