线程的状态转换图解:图片
线程的线程组:
线程组: 把多个线程组合到一起。
它可以对一批线程进行分类管理,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 }