Java ThreadGroup类相关方法调用示例

x33g5p2x  于2021-08-19 转载在 Java  
字(2.4k)|赞(0)|评价(0)|浏览(308)

Java提供了一种方便的方法来将多个线程分组在一个对象中。Java线程组由java.lang.ThreadGroup类实现。
一个线程组代表一组线程。此外,一个线程组还可以包括其他线程组。线程组形成一棵树,其中除了初始线程组,每个线程组都有一个父级。

一个线程可以访问它自己的线程组的信息,但不能访问其线程组的父线程组或任何其他线程组的信息。

线程组类构造函数

  1. ThreadGroup(String name) - 构建一个新的线程组。
  2. ThreadGroup(ThreadGroup parent, String name) - 创建一个新的线程组。

ThreadGroup类方法

  • int activeCount() -返回该线程组及其子组中活动线程的估计数量。
  • int activeGroupCount()-返回该线程组及其子组中活动组的估计数量。
  • void checkAccess()- 判断当前运行的线程是否有权限修改这个线程组。
  • void destroy() - 销毁这个线程组和它的所有子组。
  • int enumerate(Thread[] list)- 将此线程组及其子组中的每个活动线程复制到指定的数组中。
  • int enumerate(Thread[] list, boolean recurse) - 将此线程组中的每个活动线程复制到指定的数组中。
  • int enumerate(ThreadGroup[] list) - 将此线程组及其子组中的每个活动子组的引用复制到指定的数组中。
  • int enumerate(ThreadGroup[] list, boolean recurse)-将此线程组中每个活动子组的引用复制到指定的数组中。
  • int getMaxPriority()- 返回该线程组的最大优先级。
  • String getName() - 返回该线程组的名称。
  • ThreadGroup getParent() - 返回此线程组的父组。
  • void interrupt() - 中断该线程组的所有线程。
  • boolean isDaemon() - 测试这个线程组是否是一个守护线程组。
  • boolean isDestroyed()- 测试这个线程组是否已经被销毁。
  • void list() - 将此线程组的信息打印到标准输出。
  • boolean parentOf(ThreadGroup g) - 测试该线程组是否为该线程组参数或其祖先线程组之一。
  • void setDaemon(boolean daemon) - 更改该线程组的守护状态。
  • void setMaxPriority(int pri)- 设置该组的最大优先级。
  • String toString() -返回该线程组的字符串表示。
  • void uncaughtException(Thread t, Throwable e) - 当这个线程组中的一个线程因为一个未捕获的异常而停止时,由Java虚拟机调用,并且该线程没有一个特定的Thread.UncaughtExceptionHandler。 安装了UncaughtExceptionHandler。

ThreadGroup类示例

让我们创建几个线程并将其作为一个组。

public class ThreadGroupExample {
public static void main(final String[] args) {
        final Runnable runnable1 = () -> {
             System.out.println("Runnable One");
        };

        final Runnable runnable2 = () -> {
             System.out.println("Runnable Two");
        };

        final Runnable runnable3 = () -> {
             System.out.println("Runnable Three");
        };

        final Runnable runnable4 = () -> {
            System.out.println("Runnable Four");
        };

        final ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup");

        final Thread thread1 = new Thread(threadGroup, runnable1, "ThreadOne");
        thread1.start();
        final Thread thread2 = new Thread(threadGroup, runnable2, "ThreadTwo");
        thread2.start();
        final Thread thread3 = new Thread(threadGroup, runnable3, "ThreadThree");
        thread3.start();
        final Thread thread4 = new Thread(threadGroup, runnable4, "ThreadFour");
        thread4.start();

        System.out.println("Thread group name :: " + threadGroup.getName());

        threadGroup.list();
    }
}

输出:

Runnable One
Runnable Three
Thread group name :: MyThreadGroup
Runnable Two
java.lang.ThreadGroup[name=MyThreadGroup,maxpri=10]
    Runnable Four
Thread[ThreadTwo,5,MyThreadGroup]
    Thread[ThreadFour,5,MyThreadGroup]

参考资料

https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html

相关文章

微信公众号

最新文章

更多