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 }