java 22 - 18 多线程之 线程的状态转换、线程组

线程的状态转换图解:图片

 

 

线程的线程组

   线程组: 把多个线程组合到一起。
     它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。

 

首先创建一个Runnable的实现类

public class MyRunnable implements Runnable {

    public void run() {
        for(int x = 0; x < 10 ; x++){
            System.out.println(x);
        }
    }
}

 

先看看默认状态下,线程都会保存在哪个线程组中

 1     private static void method1() {
 2         //线程在默认线程数组中
 3         
 4         //创建对象
 5         MyRunnable mr = new MyRunnable();
 6         
 7         //创建线程对象
 8         Thread t1 = new Thread(mr,"阿三");
 9         Thread t2 = new Thread(mr,"阿四");
10         
11         //如果不把线程添加到自定义线程数组中,那么它们会默认添加到系统给的一个线程数组中
12         //看看这个默认的线程数组是什么
13         //public final ThreadGroup getThreadGroup()返回该线程所属的线程组。 如果该线程已经终止(停止运行),该方法则返回 null。 
14         ThreadGroup tg1 = t1.getThreadGroup();
15         ThreadGroup tg2 = t2.getThreadGroup();
16         
17         //查看这个数组的名称
18         System.out.println(tg1.getName());
19         // 通过结果我们知道了:线程默认情况下属于main线程组
20         
21         //链式方法查看这个数组的名称
22         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
23         System.out.println(Thread.currentThread().getThreadGroup().getName());
24 
25     }

由上面可知道,线程默认情况下属于main线程组

 

我们再让线程添加到自定义线程组中,并对线程组中的线程进行统一控制

 1     private static void method2() {
 2         //线程添加到自定义线程数组中
 3         
 4         //创建对象
 5         MyRunnable mr = new MyRunnable();
 6         //创建线程数组
 7         ThreadGroup tg = new ThreadGroup("自定义线程数组");
 8         
 9         //创建线程
10         //Thread(ThreadGroup group, Runnable target, String name) 
11         //分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
12         Thread t1 = new Thread(tg,mr,"阿三");
13         Thread t2 = new Thread(tg,mr,"阿四");
14         
15         //查看现在t1、t2所在的线程数组的名称
16         System.out.println(t1.getThreadGroup().getName());
17         
18         //可以统一对t1、t2进行操作
19         //把tg数组里的所有线程都设置成守护线程
20         tg.setDaemon(true);
21         
22     }

 

posted @ 2016-10-11 17:39  卡拉瓦  阅读(229)  评论(0编辑  收藏  举报