iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java ThreadGroup的作用及方法详解
  • 481
分享到

java ThreadGroup的作用及方法详解

2024-04-02 19:04:59 481人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录ThreadGroup的作用及方法Field私有构造方法公共构造方法公共方法特殊的一个方法线程组(ThreadGroup类)ThreadGroup的作用及方法 ThreadGro

ThreadGroup的作用及方法

ThreadGroup线程组,java对这个类的描述呢就是

“线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除了初始线程组之外的每个线程组都有一个父线程组。

允许线程访问关于其线程组的信息,但不允许访问关于其线程组的父线程组或任何其他线程组的信息。”

ThreadGroup并不是算是标注容器,因为,最后你会发现这个家伙是没有public的 add,remove方法的。那怎么把线程放到线程组里面呢?

答案是 在new Thread(参数),将ThreadGroup当做参数传进去。

Field


private final ThreadGroup parent;// 线程组的线程组,final 表名 线程组 不可以随便变更
String name; //名字
int maxPriority;//这个线程组 的元素 例如 线程 线程组的最大优先级,具体实现是 当线程或者线程组自身设定优先级的时候,总是取  自己父线程组的优先级和要设定的优先级的最小值
boolean destroyed;//判断是否销毁了
boolean daemon;//当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。
int nUnstartedThreads = 0;
int nthreads;//这个线程组  里面的线程数量
Thread threads[];//线程数组 ,持有 线程的引用
int ngroups;//这个线程组  里面的线程组数量
ThreadGroup groups[];//线程组数组 ,持有 线程组的引用

私有构造方法

创建不在任何线程组中的空线程组。

此方法用于创建系统线程组。


private ThreadGroup()

公共构造方法


//创建一个新线程组。这个新组的父线程组是指定的线程组parent。线程组的 名字 就是name
会对 parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限(比如 设置setDaemon)。有可能会抛出SecurityException异常
public ThreadGroup(ThreadGroup parent, String name)
//构造一个新线程组。这个新组的父线程组是当前运行线程的线程组。 就是调用上面的方法
public ThreadGroup(String name) {
    this(Thread.currentThread().getThreadGroup(), name);
}

公共方法


public final String getName()//返回线程组名字
//返回父线程组  parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限。
//有可能会抛出SecurityException异常
public final ThreadGroup getParent()
public final int getMaxPriority() //返回线程组优先级
//测试此线程组是否是守护进程线程组。当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。
public final boolean isDaemon() 
public synchronized boolean isDestroyed()//测试该线程组是否已被销毁。 
public final void setDaemon(boolean daemon)//将线程组设置成守护线程组 ,会检查 当前线程是否具有权限 修改线程组
 //设定当前线程组以及子线程组的 优先级,取pri和当前线程组的父线程组的优先级的较小值为准。 
 //这个之所以会限制 Thread的最大优先级 
 //具体实现是 当线程或者线程组自身设定优先级的时候,总是取  自己父线程组的优先级和要设定的优先级的最小值
 //会检查 当前线程是否具有权限 修改线程组
public final void setMaxPriority(int pri)
 //测试,当前这个线程组是否是 g线程组的父线程 或者参数
public final boolean parentOf(ThreadGroup g)
 //检查 当前线程是否具有权限 修改线程组  比如在当前线程中 用线程组自己本身调用它自己的一些方法 ,都会检查
public final void checkAccess()
//返回此线程组及其子线程组中活动线程数量的估计值。递归地遍历此线程组中的所有子组。 如果当前线程组已经destroyed,返回0 
public int activeCount()
//将线程组的中线程 活动线程放入list[]里面 会自动扩大这个数组,如果{@code recurse}为{@code true},则此方法递归枚举此线程组的所有子组,并引用这些子组中的每个活动线程
                                             //注意这个声明数组的方式
public int enumerate(Thread list[], boolean recurse)
//和上面方法类似  只不过 下面这个 ThreadGroup
public int enumerate(ThreadGroup list[])
public int enumerate(ThreadGroup list[], boolean recurse)
 //返回此线程组及其子组中活动组的数量的估计值。递归地遍历此线程组中的所有子组。
public int activeGroupCount()
//interrupt此线程组中的所有线程。包括 子线程组中的线程
public final void interrupt()

特殊的一个方法


public void uncaughtException(Thread t, Throwable e)

这个方法呢,作用很简单 使 t 线程 抛出一个 Throwable e的异常。这个e 异常 也是你自己定义的。如果前面设置了,


Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
    System.out.println("默认的  "+t.getName());
    System.out.println("默认的  "+e);
});

那么,在上面自定义的Throwable 会被这个捕获,如果没有设置,就打印标注错误流。对这个方法,存在的意义 比较困惑


        Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
            System.out.println("默认的  "+t.getName());
            System.out.println("默认的  "+e);
        });
        ThreadGroup threadGroup = new ThreadGroup("father");
        Thread two = new Thread(threadGroup,"two");
        threadGroup.uncaughtException(two,new IllegalAccessException("ssss"));

运行结果

线程组(ThreadGroup类)

线程组表示一个线程的集合。线程组也可以包含其他线程组。线程执行完就会被回收。


private static void methodA() {
    MyThread my = new MyThread() ;
        
    //创建线程类对象
        
    Thread t1 = new Thread(my, "线程1") ;
    Thread t2 = new Thread(my, "线程2") ;
        
    //public final ThreadGroup getThreadGroup()返回该线程所属的线程组
    ThreadGroup tg1 = t1.getThreadGroup() ;
    ThreadGroup tg2 = t2.getThreadGroup() ;
        
    //public final String getName():返回线程组的名称
    System.out.println(tg1.getName()); //main
    System.out.println(tg2.getName());//main
        
    //所有的线程它默认的线程组名称:main(主线程),主线程是包含在线程组里面的
    System.out.println(Thread.currentThread().getThreadGroup().getName());//main
}

private static void methodB() {
       //public ThreadGroup(String name)构造一个新线程组
    ThreadGroup tg = new ThreadGroup("新的线程组") ;
        
    MyThread my = new MyThread() ;
    
        //Thread(ThreadGroup group, Runnable target, String name)
    Thread t1 = new Thread(tg, my, "线程1") ;
    Thread t2 = new Thread(tg, my, "线程2") ;
        
    //直接获取线程组名称
    System.out.println(t1.getThreadGroup().getName());
    System.out.println(t2.getThreadGroup().getName());
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java ThreadGroup的作用及方法详解

本文链接: https://www.lsjlt.com/news/137807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • java ThreadGroup的作用及方法详解
    目录ThreadGroup的作用及方法Field私有构造方法公共构造方法公共方法特殊的一个方法线程组(ThreadGroup类)ThreadGroup的作用及方法 ThreadGro...
    99+
    2024-04-02
  • Java中Thread类详解及常用的方法
    目录一、Thread 的常见构造方法二、Thread 的常见属性三、创建线程四、中断线程五、线程等待六、获取线程引用七、线程休眠八、线程状态总结一、Thread 的常见构造方法 方法...
    99+
    2024-04-02
  • .gitignore文件作用及使用方法详解
    目录正文Git 忽略规则优先级Git 忽略规则匹配语法匹配示例特殊情况文件已经提交过添加一个已经配置忽略的文件检查文件为什么被忽略gitignore建议正文 在本地的代码目录中,有...
    99+
    2023-03-06
    .gitignore文件 .gitignore文件作用
  • PHP析构方法的名称及作用详解
    PHP析构方法的名称及作用详解 在PHP面向对象编程中,析构方法是一个特殊的方法,用于在对象被销毁时自动调用。析构方法的名称固定为__destruct(),在对象的生命周期结束时执行其...
    99+
    2024-04-02
  • PHP 中点的作用及用法详解
    PHP 中点的作用及用法详解 在PHP中,点(.)被称为连接符或者字符串连接运算符。它的作用是用来连接两个字符串,将它们合并为一个新的字符串。在实际开发中,点是常用的字符之一,它能够帮...
    99+
    2024-04-02
  • DOCTYPE声明的作用及用法详解
    DOCTYPE声明是一种标记语言中的指令,它用于告诉浏览器要使用哪个HTML(或XML)版本来解析文档。DOCTYPE声明位于HTM...
    99+
    2023-09-20
    DOCTYPE
  • Java中的反射的作用以及详解
    目录 目录 1.反射是什么? 2.反射的优缺点: 3.反射的应用场景: 4.反射创建的三种方式 : 5.反射的常用方法代码示例: 1.实体类(反射获取的类): 2.反射常用方法的示例代码: 1.反射是什么? Java中的反射是指在运行...
    99+
    2023-10-24
    java 开发语言
  • Java File类的概述及常用方法使用详解
    目录一、File类的概述和构造方法二、File类创建功能三、File类创建和获取功能四、File类的删除功能一、File类的概述和构造方法 public class File ext...
    99+
    2024-04-02
  • java synchronized的用法及原理详解
    目录为什么要用synchronized使用方式字节码语义对象锁(monitor)锁升级过程为什么要用synchronized 相信大家对于这个问题一定都有自己的答案,这里我还是要啰嗦...
    99+
    2024-04-02
  • Java中Optional类及orElse方法详解
    目录引言Java 中的 Optional 类ofNullable() 方法orElse() 方法案例orElseGet() 方法案例orElse() 与 orElseGet() 之间...
    99+
    2024-04-02
  • 关于Java中finalize析构方法的作用详解
    目录一. 析构方法1. 概念2. 作用3. 特点二. 基本使用1. finalize简介2. 代码案例2.1 Counter计数器2.2 CounterTest测试类四. 结语一. ...
    99+
    2023-05-19
    Java finalize析构方法 Java析构方法作用 Java finalize
  • 详解Java CompletableFuture使用方法以及与FutureTask的区别
    目录futureTask 创建异步任务创建任务1. .supplyAsync2. .runAsync异步回调1. .thenApply2. .thenAccept3. .except...
    99+
    2024-04-02
  • 详解Java方法method的定义与调用及重载
    目录方法的定义和调用什么是方法方法的声明格式方法的调用方式方法的详细说明总结方法的重载什么是方法重载构成方法重载的条件总结方法的定义和调用 什么是方法 方法(method)就是一段用...
    99+
    2024-04-02
  • PHPcms整合方法及操作步骤详解
    PHPcms整合方法及操作步骤详解 随着互联网的不断发展,网站建设成为了各行各业不可或缺的一部分。而作为网站搭建的重要工具之一,PHPcms(内容管理系统)在网站建设中扮演了重要的角色...
    99+
    2024-03-14
    php cms 整合
  • PHPcms整合方法及操作步骤详解
    PHPcms整合方法及操作步骤详解 随着互联网的不断发展,网站建设成为了各行各业不可或缺的一部分。而作为网站搭建的重要工具之一,PHPcms(内容管理系统)在网站建设中扮演了重要的角色...
    99+
    2024-03-14
    php cms 整合
  • Java中的==使用方法详解
    目录Java中的==2 字符串常量池3 总结Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? // 例一 String st...
    99+
    2024-04-02
  • Java注解详解及实现自定义注解的方法
    目录概念‍♀️作用⛹JDK中预定义的一些注解注解生成文档案例自定义注解格式本质属性:接口中的抽象方法元注解:用于描述注解的注解‍♂️在程序使用(解析)注解:获取注解中...
    99+
    2024-04-02
  • 详解Python中__new__方法的作用
    目录前言一、__new__方法简介1、初始化数据加载+解析类实例2、初始化数据加载重写new方法+解析类实例二、单例模式1、用new方法如何实现单例模式2、如何控制类仅执行一次初始化...
    99+
    2024-04-02
  • java中构造方法及this关键字的用法实例详解(超详细)
    目录初识构造方法 构造方法的使用 初识this this.xx的用法this()用于构造函数的调用总结初识构造方法  我们上篇讲了java中类...
    99+
    2024-04-02
  • Java中File类方法详解以及实践
    目录File类概述File类常用构造器File类常用方法常用方法示例createTempFile临时文件创建示例FilenameFilter文件过滤器示例总结File类概述 File...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作