Java多线程的其他知识_动力节点Java学院整理

发布时间 - 2026-01-11 01:23:12    点击率:

一、线程组

 /** 
 * A thread group represents a set of threads. In addition, a thread 
 * group can also include other thread groups. The thread groups form 
 * a tree in which every thread group except the initial thread group 
 * has a parent. 
 * <p> 
 * A thread is allowed to access information about its own thread 
 * group, but not to access information about its thread group's 
 * parent thread group or any other thread groups. 
 * 
 * @author unascribed 
 * @version 1.66, 03/13/08 
 * @since  JDK1.0 
 */ 

一个线程组代表了一系列的线程。并且,一个线程组可以包括其他的线程组。除了初始线程组外,每个线程组都有一个父线程组,类似于树的结构。

一个线程可以访问它所在线程组的信息, 不可以访问它父线程组和其他线程组的信息。

 从这段话中可以大概明白线程组的概念,所有的线程和线程组构成一个树的结构,如下:

 

查看Thread的API,可以看到,创建一个线程可以指定它的线程组和不指定线程组。如果指定其所属的线程组,那么该线程组是创建它的线程所属线程组的子线程组。如果不指定线程组,则属于默认情况,该线程和创建它的线程在同一个线程组。

以上面的图举个简单的例子:

如果main线程创建了Thread1线程,没有指定Thread1所在的线程组,那么Thread1就默认和main线程属于同一个线程组,即系统线程组。

如果main线程创建了Thread3线程,没指定Thread3所在的线程组为线程组1,那么线程组1就属于系统线程组,和main线程在树结构中平级。

一旦某个线程加入了指定线程组之后,该线程将一直属于该线程组,直到该线程死亡,线程运行中途不能改变它所属的线程组。因为指定线程所在线程组是在创建线程的视乎完成的,所以之后不能再修改它所在的线程组。

下面是ThreadGroup的方法摘要

二、线程组与未处理的异常

从JDK1.5开始,Java加强了线程的异常处理,如果线程执行过程中抛出了一个未处理的异常,JVM在结束该线程之前会自动查找是否有对应的Thread.UncaughtExceptionHandler对象,如果找到该处理器对象,将会调用该对象的uncaughtException(Thread t,Throwable e)方法来处理该异常。

Thread.UncaughtExceptionHandler是Thread类的一个内部公共静态接口,该接口内只有一个方法:

void uncaughtException(Thread t,Throwable t),该方法中的t代表出现异常的线程,而e代表该线程抛出的异常。

Thread类提供了两个方法来设置异常处理器:

public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

线程类的所有线程实例设置默认的异常处理器

public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)

为指定线程的实例设置异常处理器

ThreadGroup类实现了Thread.UncaughtExceptionHandler接口,所以每个线程所属的线程组将会作为默认的异常处理器。当一个线程抛出未处理的异常时,JVM会首先查找该异常对应的异常处理器(setUncaughtExceptionHandler方法设置的异常处理器),如果找到该异常处理器,将调用该异常处理器处理该异常,否则,JVM将会调用该线程所属的线程组对象的uncaughtException方法来处理该异常,线程组处理异常的流程如下:

1)、如果该线程组有父线程组,则调用父线程组的uncaughtException方法来处理该异常

2)、否则,如果该线程实例所属的线程类有默认的异常处理器(由setDefaultUncaughtExceptionHandler方法设置的异常处理器),那么就调用该异常处理器来处理该异常

3)、否则,将异常调试栈的信息打印到System.err错误输出流,并结束该线程。

看下面的例子:

 class MyHandler implements Thread.UncaughtExceptionHandler{ 
   @Override 
   public void uncaughtException(Thread t, Throwable e) { 
     System.out.println("出现了异常"); 
     e.printStackTrace(); 
   } 
 } 
 public class Test{ 
   public static void main(String[] args) { 
     Thread.currentThread().setUncaughtExceptionHandler(new MyHandler()); 
     int a=1/0; 
   } 
 } 

在主线程中设置了异常处理器,最后捕获了异常。

以上所述是小编给大家介绍的Java多线程的其他知识_动力节点Java学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# java多线程知识  # java多线程入门知识及示例程序  # 将会  # 方法来  # 抛出  # 中平  # 未处理  # 小编  # 是在  # 都有  # 在此  # 不可以  # 其他的  # 给大家  # 可以看到  # 只有一个  # 类似于  # 能再  # 所述  # 创建一个  # 给我留言  # 多线程 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  千库网官网入口推荐 千库网设计创意平台入口  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Android自定义控件实现温度旋转按钮效果  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  ,在苏州找工作,上哪个网站比较好?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  浅析上传头像示例及其注意事项  Laravel Fortify是什么,和Jetstream有什么关系  Laravel如何处理表单验证?(Requests代码示例)  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  JS中对数组元素进行增删改移的方法总结  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何在七牛云存储上搭建网站并设置自定义域名?  Windows Hello人脸识别突然无法使用  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何在IIS管理器中快速创建并配置网站?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Python结构化数据采集_字段抽取解析【教程】  如何安全更换建站之星模板并保留数据?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Thinkphp 中 distinct 的用法解析  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  如何在阿里云部署织梦网站?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Bootstrap CSS布局之列表  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何做网站制作流程,*游戏网站怎么搭建?  详解Huffman编码算法之Java实现  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel如何与Inertia.js和Vue/React构建现代单页应用  QQ浏览器网页版登录入口 个人中心在线进入