我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈一下Java线程组ThreadGroup

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈一下Java线程组ThreadGroup

1 简介

一个线程集合。是为了更方便地管理线程。父子结构的,一个线程组可以集成其他线程组,同时也可以拥有其他子线程组。

从结构上看,线程组是一个树形结构,每个线程都隶属于一个线程组,线程组又有父线程组,根线程组——System线程组。

2 线程组树的结构

  • JVM创建的system线程组是用来处理JVM的系统任务的线程组,例如对象的销毁等
  • system线程组的直接子线程组是main线程组,这个线程组至少包含一个main线程,用于执行main方法
  • main线程组的子线程组就是应用程序创建的线程组。

一个线程可以访问其所属线程组的信息,但不能访问其所属线程组的父线程组或者其他线程组的信息。

3 线程组的构造

java.lang.ThreadGroup 提供了两个构造函数:

ConstructorDescription
ThreadGroup(String name)根据线程组名称创建线程组,其父线程组为main线程组
ThreadGroup(ThreadGroup parent, String name)根据线程组名称创建线程组,其父线程组为指定的parent线程组
  • 两个构造函数的用法: 

4 API

1.public ThreadGroup(ThreadGroup parent, String name)
分析:构建一个新的线程组,这个新组的父级是当前正在运行的线程的线程组;
2.public ThreadGroup(ThreadGroup parent, String name)
分析:构建一个新的线程组,这个新租的父级是指定的线程组;
3.public int activeCount()
分析:返回此线程组及其子组中活动线程的数量的估计值,递归遍历该线程组中所有的子组;
返回的值只是一个估计值,因为用这种方法遍历内部数据结构因为线程的数量可能会动态发生变化,并且可能会受到某些系统线程的影响,此方法主要用于调试和监视目的;
4.public int activeGroupCount()
分析:返回此线程组及其子组中活动组的数目的估计值。递归遍历该线程组中的所有子群。返回的值只是一个估计值,因为线程组的数量可能会动态变化,而这种方法遍历内部数据结构。此方法主要用于调试和监视目的。
5.public final void checkAccess()
分析:确定当前运行的线程是否具有修改此线程组的权限。
如果存在安全管理器,它的checkaccess方法调用这个线程组作为其参数。这可能会导致抛出SecurityException。
6.public final void destroy()
分析:破坏此线程组及其所有子组,此线程组必须为空,表示此线程组中的所有线程必须都停止;
7.public int enumerate(Thread[] list)
分析:将这个线程组复制到它所在的组及其子组中;
8.public int enumerate(Thread[] list, boolean recurse)
分析:将这个线程组复制到它所在的线程组,如果recurse是true,此方法递归枚举此线程组的所有子组,并对这些子组中的每个活动线程进行引用。如果数组太短无法保存所有的线程,额外的线程将被默默的忽略;
9.public int enumerate(ThreadGroup[] list)
分析:复制线程组中的活跃线程引用到它当前线程组及其子组中;
10.public int enumerate(ThreadGroup[] list, boolean recurse)
分析:复制线程组中的活跃线程引用到它当前线程组及其子组中,如果recurse是true,此方法递归枚举此线程组的所有子组,并对这些子组中的每个活动线程组进行引用。
11.public final int getMaxPriority()
分析:返回此线程组的最大优先级。作为该组的一部分的线程不能具有比优先级最高的优先级。
12.public final String getName()
分析:返回此线程组的名称;
13.public final ThreadGroup getParent()
分析:返回此线程组的父级;
14.public final void interrupt()
分析:终端此线程组中的所有线程;
15.public final boolean isDaemon()
分析:测试此线程组是否是守护线程组。当终止最后一个线程或它的最后一个线程组被销毁时,守护线程组会自动销毁;
16.public boolean isDestroyed()
分析:测试此线程组是否已被销毁;
17.public void list()
分析:将此线程组的信息打印到标准输出。此方法仅用于调试。
18.public final boolean parentOf(ThreadGroup g)
分析:测试此线程组是线程组参数还是其祖先线程组之一;
19.public final void setDaemon(boolean daemon)
分析:更改此线程组的守护进程状态;
20.public final void setMaxPriority(int pri)
分析:设置组的最大优先级。线程组中具有较高优先级的线程不会受到影响

查看当前线程组的信息。

public static void list(){
		ThreadGroup tg = new ThreadGroup ("subgroup 1");
		Thread t1 = new Thread (tg, "thread 1");
		Thread t2 = new Thread (tg, "thread 2");
		Thread t3 = new Thread (tg, "thread 3");
		tg = new ThreadGroup ("subgroup 2");
		Thread t4 = new Thread (tg, "my thread");
		tg = Thread.currentThread ().getThreadGroup ();
		int agc = tg.activeGroupCount ();
		System.out.println ("Active thread groups in " + tg.getName () + " thread group: " + agc);
		tg.list ();
}

输出如下:

Active thread groups in main thread group: 2
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    java.lang.ThreadGroup[name=subgroup 1,maxpri=10]
    java.lang.ThreadGroup[name=subgroup 2,maxpri=10]

5 终止线程组中的所有线程

一个线程不应由其他线程来强制中断或停止,而是应该由线程自己自行停止。

因此 Thread.currentThread().stop(), Thread.currentThread().suspend(), Thread.currentThread().resume() 都已经被废弃了。

interrupt() 方法的作用是通知线程应该中断了,具体到底中断还是继续运行,由被通知的线程处理。

到此这篇关于浅谈一下Java线程组ThreadGroup的文章就介绍到这了,更多相关Java线程组ThreadGroup内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈一下Java线程组ThreadGroup

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅谈一下Java线程组ThreadGroup

ThreadGroup是为了方便线程管理出现了,可以统一设定线程组的一些属性,比如setDaemon,设置未处理异常的处理方法,设置统一的安全策略等等,需要的朋友可以参考下
2023-05-19

浅谈一下Java多线程断点复制

这篇文章主要介绍了浅谈一下Java多线程断点复制,当程序执行中断时(出现错误、断电关机),仍可以从上次复制过程中重新开始(不必从头开始复制),需要的朋友可以参考下
2023-05-15

浅谈一下python线程池简单应用

这篇文章主要介绍了浅谈一下python线程池简单应用,线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它,需要的朋友可以参考下
2023-05-16

python浅谈一下线程间通信之队列

本篇文章介绍了为什么需要线程间通信,以及通信方式有哪些,最后每种通信方式都举了一个例子,最常用的还是共享变量的方式来进行线程间通信。感兴趣的朋友可以阅读本文
2023-05-17

Java中线程组ThreadGroup与线程池的区别及示例

这篇文章主要介绍了Java中线程组与线程池的区别及示例,ThreadGroup是用来管理一组线程的,可以控制线程的执行,查看线程的执行状态等操作,方便对于一组线程的统一管理,需要的朋友可以参考下
2023-05-19

浅谈一下Java中的堆和栈

这篇文章主要介绍了一下Java中的堆和栈,Java数据类型在执行过程中存储在两种不同形式的内存中:栈和堆,它们通常由运行Java虚拟机(JVM)的底层平台维护,需要的朋友可以参考下
2023-05-18

浅谈java线程状态与线程安全解析

本文主要介绍了浅谈java线程状态与线程安全解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-03

浅谈Java线程间通信之wait/notify

Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。先来我们来看下相关定义:wait() :调用该方法的线程进入WA
2023-05-31

浅谈一下Java中枚举的用法

这篇文章主要介绍了浅谈一下Java中枚举的用法,枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数,当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型,需要的朋友可以参考下
2023-05-14

浅谈一下Java的双亲委派模式

这篇文章主要介绍了一下Java的双亲委派模式,双亲委派指得是,JVM在加载类时,会委派给ExtClassLoader和BootstrapClassLoader进⾏加载,如果没加载到才由⾃⼰进⾏加载,需要的朋友可以参考下
2023-05-18

浅谈一下Java中集合的迭代方式

这篇文章主要介绍了浅谈一下Java中集合的迭代方式,可以帮助我们学习,理解函数式编程,需要的朋友可以参考下
2023-05-14

浅谈一下Java中的悲观锁和乐观锁

这篇文章主要介绍了一下Java中的悲观锁和乐观锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-16

浅谈Java多线程的优点及代码示例

尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录