Android(java)学习笔记13:线程组的概述和使用

1. Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。

(1)默认情况下,所有的线程都属于主线程组。 public final ThreadGroup getThreadGroup()

(2)我们也可以给线程设置分组 Thread(ThreadGroup group, Runnable target, String name)

下面我根据代码来实现:

Runnable接口实现类

 1 package cn.itcast_06;
 2 
 3 public class MyRunnable implements Runnable {
 4 
 5     @Override
 6     public void run() {
 7         for (int x = 0; x < 100; x++) {
 8             System.out.println(Thread.currentThread().getName() + ":" + x);
 9         }
10     }
11 
12 }

 测试类:

 1 package cn.itcast_06;
 2 
 3 /*
 4  * 线程组: 把多个线程组合到一起。
 5  * 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
 6  */
 7 public class ThreadGroupDemo {
 8     public static void main(String[] args) {
14         MyRunnable my = new MyRunnable();
15         Thread t1 = new Thread(my, "林青霞");
16         Thread t2 = new Thread(my, "刘意");
17         // 我不知道他们属于那个线程组,我想知道,怎么办
18         // 线程类里面的方法:public final ThreadGroup getThreadGroup()
19         ThreadGroup tg1 = t1.getThreadGroup();
20         ThreadGroup tg2 = t2.getThreadGroup();
21         // 线程组里面的方法:public final String getName()
22         String name1 = tg1.getName();
23         String name2 = tg2.getName();
24         System.out.println(name1);
25         System.out.println(name2);
26         // 通过结果我们知道了:线程默认情况下属于main线程组
27         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
28         System.out.println(Thread.currentThread().getThreadGroup().getName());
//t1.start();
//t1.start();
}
}

输出结果是:

2. 当然现实生活中我们要自定义线程组,所有接下来我们讲解自定义线程组

这里我们不得不说自定义线程组的逻辑如下:

(1)创建一个线程组

(2)创建其他线程的时候,把其他线程的组指定为我们自己新建的线程组

 1 package cn.itcast_06;
 2 
 3 public class MyRunnable implements Runnable {
 4 
 5     @Override
 6     public void run() {
 7         for (int x = 0; x < 100; x++) {
 8             System.out.println(Thread.currentThread().getName() + ":" + x);
 9         }
10     }
11 
12 }
 1 package cn.itcast_06;
 2 
 3 /*
 4  * 线程组: 把多个线程组合到一起。
 5  * 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
 6  */
 7 public class ThreadGroupDemo {
 8     public static void main(String[] args) {
 9         // method1();
10 
11         // 我们如何修改线程所在的组呢?
12         // 创建一个线程组
13         // 创建其他线程的时候,把其他线程的组指定为我们自己新建线程组
14         method2();
15 
16         // t1.start();
17         // t2.start();
18     }
19 
20     private static void method2() {
21         // ThreadGroup(String name)
22         ThreadGroup tg = new ThreadGroup("这是一个新的组");
23 
24         MyRunnable my = new MyRunnable();
25         // Thread(ThreadGroup group, Runnable target, String name),指定t1和t2为线程组tg
26         Thread t1 = new Thread(tg, my, "林青霞");
27         Thread t2 = new Thread(tg, my, "刘意");
28        
29         System.out.println(t1.getThreadGroup().getName());
30         System.out.println(t2.getThreadGroup().getName());
31         
32         //通过组名称设置后台线程,表示该组的线程都是后台线程,这里可以直接设置线程组,就可以设置线程组中的所有的线程
33         tg.setDaemon(true);
34     }
35 
36     private static void method1() {
37         MyRunnable my = new MyRunnable();
38         Thread t1 = new Thread(my, "林青霞");
39         Thread t2 = new Thread(my, "刘意");
40         // 我不知道他们属于那个线程组,我想知道,怎么办
41         // 线程类里面的方法:public final ThreadGroup getThreadGroup()
42         ThreadGroup tg1 = t1.getThreadGroup();
43         ThreadGroup tg2 = t2.getThreadGroup();
44         // 线程组里面的方法:public final String getName()
45         String name1 = tg1.getName();
46         String name2 = tg2.getName();
47         System.out.println(name1);
48         System.out.println(name2);
49         // 通过结果我们知道了:线程默认情况下属于main线程组
50         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
51         System.out.println(Thread.currentThread().getThreadGroup().getName());
52     }
53 }
原文地址:https://www.cnblogs.com/hebao0514/p/4510498.html