天天看點

多線程_線程組的概述和使用

package cn.itcast_06;

/*
 * 線程組:把多個線程組全在一起。
 * 它可以對一批線程進行分類管理,Java允許程式直接對線程組進行控制。
 */
public class ThreadGroupDemo {
  public static void main(String[] args) {
    method1();

    // 我們如何修改線程所在的組呢?
    // 建立一個線程
    // 建立其它線程的時候,把其它線程的組指定為我們自已建立線程組
    method2();

    // t1.start();
    // t2.start();
  }

  private static void method2() {
    ThreadGroup tg = new ThreadGroup("這是一個新的組");

    MyRunnable my = new MyRunnable();
    // public Thread(ThreadGroup group,Runnable target,String name)
    Thread t1 = new Thread(tg, my, "鄧超");
    Thread t2 = new Thread(tg, my, "孫麗");

    System.out.println(t1.getThreadGroup().getName());
    System.out.println(t2.getThreadGroup().getName());

    // 通過組名稱設定背景(守護)線程,表示該組的組程都是背景(守護)線程
    tg.setDaemon(true);
    method1();
  }

  private static void method1() {
    MyRunnable my = new MyRunnable();
    Thread t1 = new Thread(my, "鄧超");
    Thread t2 = new Thread(my, "孫麗");

    // 我們不知道他們屬于那個線程組,但是我想知道,怎麼辦?
    // 線程内裡面的方法:public final ThreadGroup getThreadGroup():傳回該線程所屬的線程組。
    ThreadGroup tg1 = t1.getThreadGroup();
    ThreadGroup tg2 = t2.getThreadGroup();
    // 線程裡面的方法:public final String getName():傳回此線程組的名稱。
    String name1 = tg1.getName();
    String name2 = tg2.getName();
    System.out.println(name1);
    System.out.println(name2);
    // 通過結果我們知道了:線程預設情況下屬于main線程組
    // 通過測試,我們看到,預設情況下,所有的線程都屬于同一個組
    System.out.println(Thread.currentThread().getThreadGroup().getName());

    // t1.start();
    // t2.start();
  }
}      
package cn.itcast_06;

public class MyRunnable implements Runnable {

  @Override
  public void run() {
    for (int x = 0; x < 100; x++) {
      System.out.println(Thread.currentThread().getName() + ":" + x);
    }
  }

}