Java教程

Java 线程组

Java提供了一种将多个线程组合到单个对象中的便捷方法。这样,我们可以通过单个方法调用来暂停,恢复或中断线程组。
注意: 现在不建议使用suspend(),resume()和stop()方法。
Java线程组由 java.lang.ThreadGroup 类实现。
ThreadGroup表示一组线程。一个线程组也可以包括另一个线程组。线程组创建一棵树,其中除初始线程组外的每个线程组都有一个父级。
允许线程访问有关其自己的线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。

ThreadGroup类的构造函数

ThreadGroup类的构造函数只有两个。
构造函数 说明
ThreadGroup(字符串名称) 创建具有给定名称的线程组。
ThreadGroup(ThreadGroup父级,字符串名称) 使用给定的父组和名称创建线程组。

ThreadGroup类的方法

ThreadGroup类中有很多方法。下面列出了ThreadGroup方法。
修饰符和类型 方法 说明
void checkAccess() 此方法确定当前正在运行的线程是否有权修改线程组。
int activeCount() 此方法返回线程组及其子组中活动线程数的估计值。
int activeGroupCount() 此方法返回线程组及其子组中活动组的数量的估计值。
void destroy() 此方法破坏线程组及其所有子组。
int enumerate(Thread[] list) 此方法将线程组及其子组中的每个活动线程复制到指定的数组中。
int getMaxPriority() 此方法返回线程组的最大优先级。
String getName() 此方法返回线程组的名称。
ThreadGroup getParent() 此方法返回线程组的父级。
void interrupt() 此方法中断线程组中的所有线程。
boolean isDaemon() 此方法测试线程组是否是守护程序线程组。
void setDaemon(boolean daemon) 此方法更改线程组的守护程序状态。
boolean isDestroyed() 此方法测试此线程组是否已被破坏。
void list() 此方法将有关线程组的信息打印到标准输出。
boolean parentOf(ThreadGroup g) 此方法测试线程组是线程组参数还是其祖先线程组之一。
void suspend() 此方法用于挂起线程组中的所有线程。
void resume() 此方法用于恢复使用suspend()方法挂起的线程组中的所有线程。
void setMaxPriority(int pri) 此方法设置组的最大优先级。
void stop() 此方法用于停止线程组中的所有线程。
String toString() 此方法返回线程组的字符串表示形式。
让我们看一下对多个线程进行分组的代码。
ThreadGroup tg1 = new ThreadGroup("Group A");
Thread t1 = new Thread(tg1,new MyRunnable(),"one");
Thread t2 = new Thread(tg1,new MyRunnable(),"two");
Thread t3 = new Thread(tg1,new MyRunnable(),"three");
现在所有3个线程都属于一个线程组。在这里,tg1是线程组名称,MyRunnable是实现Runnable接口的类,而"一个","两个"和"三个"是线程名称。
现在我们可以一次中断所有线程。仅一行代码。
Thread.currentThread().getThreadGroup().interrupt();

线程组示例

文件: ThreadGroupDemo.java
public class ThreadGroupDemo implements Runnable{
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
    public static void main(String[] args) {
        ThreadGroupDemo runnable = new ThreadGroupDemo();
        ThreadGroup tg1 = new ThreadGroup("Parent ThreadGroup");
        Thread t1 = new Thread(tg1, runnable,"one");
        t1.start();
        Thread t2 = new Thread(tg1, runnable,"two");
        t2.start();
        Thread t3 = new Thread(tg1, runnable,"three");
        t3.start();
        System.out.println("Thread Group Name: "+tg1.getName());
        tg1.list();
    }
}
输出:
one
two
three
Thread Group Name: Parent ThreadGroup
java.lang.ThreadGroup[name=Parent ThreadGroup,maxpri=10]
Thread[one,5,Parent ThreadGroup]
Thread[two,5,Parent ThreadGroup]
Thread[three,5,Parent ThreadGroup]
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4