1. 程式人生 > >Java多執行緒2.6.執行緒組的概述與使用

Java多執行緒2.6.執行緒組的概述與使用

執行緒組的概述與使用

1、執行緒組

  • 執行緒組: 把多個執行緒組合到一起。
  • 主要作用: 它可以對一批執行緒進行分類管理,Java允許程式直接對執行緒組進行控制。

(1)建立執行緒類

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);
		}
	}

}

(2)測試執行緒類

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(String name)
		ThreadGroup tg = new ThreadGroup("這是一個新的組");

		MyRunnable my = new MyRunnable();
		// 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);
	}

	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());
	}
}

2、用到的方法

  • 執行緒類裡面的方法:public final ThreadGroup getThreadGroup()
  • 執行緒組裡面的方法:public final String getName()
  • System.out.println(Thread.currentThread().getThreadGroup().getName());
  • ThreadGroup(String name)
  • Thread(ThreadGroup group, Runnable target, String name)
  • 通過組名稱設定後臺執行緒,表示該組的執行緒都是後臺執行緒:tg.setDaemon(true);