Rumah  >  Artikel  >  Java  >  Contoh dan kaedah menggunakan kumpulan benang dalam Java

Contoh dan kaedah menggunakan kumpulan benang dalam Java

WBOY
WBOYke hadapan
2023-04-21 23:10:171424semak imbas

Kumpulan utas (kelas ThreadGroup) dalam Java

Kelas ThreadGroup digunakan dalam Java untuk mewakili kumpulan utas, yang mewakili koleksi utas dan boleh mengurus kumpulan utas dan kumpulan utas. Benang boleh diberikan kepada kumpulan benang tertentu Terdapat objek benang dalam kumpulan benang, terdapat juga kumpulan benang, dan terdapat juga benang dalam kumpulan ini agak serupa dengan bentuk pokok. seperti yang ditunjukkan dalam rajah.

Contoh dan kaedah menggunakan kumpulan benang dalam Java

Semua utas yang dibuat oleh pengguna tergolong dalam kumpulan utas yang ditentukan Jika tiada kumpulan utas dinyatakan secara eksplisit, utas itu tergolong dalam kumpulan utas lalai (iaitu, kumpulan utas utama). Secara lalai, utas anak dan utas induk berada dalam kumpulan utas yang sama.

Selain itu, kumpulan utas yang dimiliki oleh utas hanya boleh ditentukan apabila ia dibuat Kumpulan utas yang dimilikinya tidak boleh ditukar semasa utas sedang berjalan Maksudnya, kumpulan utas yang dimiliki tidak boleh ditukar sebaik sahaja ia ditentukan.

2. Mengapa menggunakan kumpulan benang

1.Keselamatan

Benang dalam kumpulan benang yang sama boleh mengubah suai data satu sama lain. Tetapi jika mereka berada dalam kumpulan utas yang berbeza, maka data tidak boleh diubah suai "merentas kumpulan utas", dan keselamatan data boleh dijamin pada tahap tertentu.

2. Pengurusan kelompok

Objek kumpulan benang atau benang boleh diurus dalam kelompok untuk mengatur atau mengawal objek kumpulan benang atau benang dengan berkesan.

3. Contoh penggunaan kumpulan benang

1. Kumpulan benang persatuan benang: persatuan peringkat pertama

Apa yang dipanggil persatuan peringkat pertama bermakna objek induk mempunyai objek anak, tetapi tiada objek cucu dibuat. Sebagai contoh, buat kumpulan benang, dan kemudian tetapkan urutan yang dibuat kepada kumpulan untuk mengurus urutan ini dengan berkesan. Contoh kod adalah seperti berikut:

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();
 }
 }
 }
}
复制代码

Keputusan pelaksanaan adalah seperti berikut:

线程名: 线程A, 所在线程组: root线程组
线程名: 线程B, 所在线程组: root线程组
复制代码

2. Kumpulan benang persatuan benang: persatuan berbilang peringkat

Apa yang dipanggil persatuan berbilang peringkat bermakna objek induk mempunyai objek anak, dan mencipta objek cucu dalam objek kanak-kanak akan mempunyai kesan keturunan. Contohnya, gunakan kaedah pembinaan kedua dalam rajah di bawah untuk mengaitkan kumpulan sub-benang kepada kumpulan benang tertentu, dan kemudian mengaitkan benang yang dibuat kepada kumpulan sub-benang Ini akan mempunyai kesan pokok benang.

Contoh dan kaedah menggunakan kumpulan benang dalam Java

Contoh kod adalah seperti berikut:

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();
 }
 }
 }
}
复制代码

Keputusan pelaksanaan adalah seperti berikut:

线程名: 线程A, 所在线程组: root线程组, 父线程组: main
线程名: 线程B, 所在线程组: root线程组, 父线程组: main
线程名: 线程C, 所在线程组: 子线程组, 父线程组: root线程组
线程名: 线程D, 所在线程组: 子线程组, 父线程组: root线程组
复制代码

3. Pengurusan kelompok benang dalam kumpulan

Sememangnya, menggunakan kumpulan utas memerlukan pengurusan kumpulan utas Contohnya, utas dalam kumpulan boleh diganggu dalam kumpulan Contoh kod adalah seperti berikut:

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() + "执行结束");
 }
}
复制代码

Keputusan pelaksanaan adalah seperti berikut:

线程名: 线程A, 所在线程组: root线程组, 父线程组: main
线程名: 线程B, 所在线程组: root线程组, 父线程组: main
线程名: 线程C, 所在线程组: 子线程组, 父线程组: root线程组
线程名: 线程D, 所在线程组: 子线程组, 父线程组: root线程组
批量中断组内线程
线程A执行结束
线程B执行结束
线程C执行结束
线程D执行结束
复制代码

Atas ialah kandungan terperinci Contoh dan kaedah menggunakan kumpulan benang dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam