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

 更新时间:2017年05月26日 15:09:03   投稿:mrr  
这篇文章主要介绍了Java多线程的其他知识,需要的朋友可以参考下

一、线程组

 /** 
 * 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学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

相关文章

  • J2EE Servlet上传文件到服务器并相应显示功能的实现代码

    J2EE Servlet上传文件到服务器并相应显示功能的实现代码

    这篇文章主要介绍了J2EE Servlet上传文件到服务器,并相应显示,在文中上传方式使用的是post不能使用get,具体实例代码大家参考下本文
    2018-07-07
  • 详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    本文主要介绍了Mybatis-plus(MP)中CRUD操作保姆级笔记,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java Lambda 表达式详解及示例代码

    Java Lambda 表达式详解及示例代码

    本文主要介绍Java Lambda 表达式的知识,这里整理了相关资料,JavaLambda 是Java8 引入的新功能,有兴趣的小伙伴可以参考下
    2016-09-09
  • SpringMVC之DispatcherServlet配置文件应该放在哪里呢

    SpringMVC之DispatcherServlet配置文件应该放在哪里呢

    这篇文章主要介绍了SpringMVC之DispatcherServlet配置文件应该放在哪里的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • spring cloud Ribbon用法及原理解析

    spring cloud Ribbon用法及原理解析

    这篇文章主要介绍了spring cloud Ribbon用法及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java新增关联的三张表,每张表要求都插入集合,代码实现方式

    java新增关联的三张表,每张表要求都插入集合,代码实现方式

    这篇文章主要介绍了java新增关联的三张表,每张表要求都插入集合,代码实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 关于Java HashMap自动排序的简单剖析

    关于Java HashMap自动排序的简单剖析

    这篇文章主要给大家介绍了关于Java HashMap自动排序的简单剖析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 利用Spring框架为自己的校园卡充值(推荐)

    利用Spring框架为自己的校园卡充值(推荐)

    这篇文章主要介绍了利用Spring框架为自己的校园卡充值,本次实验主要运用了Spring的控制反转(IOC)和依赖注入(DI)等知识,通过利用Spring框架编写Java程序,实现学生卡的单次充值,如需对学生卡进行多次充值,可将部分代码修改即可实现,需要的朋友可以参考下
    2022-10-10
  • java去除数组重复元素的四种方法

    java去除数组重复元素的四种方法

    本文给大家分享四种java去除数组重复元素的方法,每种方法通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • JVM GC 垃圾收集梳理总结

    JVM GC 垃圾收集梳理总结

    这篇文章主要介绍了JVM GC 垃圾收集梳理总结,GC是一种自动的存储管理机制。当一些被占用的内存不再需要时,就应该予以释放,这种存储资源管理,称为垃圾回收
    2022-07-07

最新评论