`
boyitech
  • 浏览: 86184 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

博弈Java讲义 - Java线程之uncontrolled exceptions

    博客分类:
  • Java
阅读更多

前两天翻阅《Effective Java》发现一条提示慎用线程组。ThreadGroup提供的很多功能的实现是有瑕疵的。例如,我们可以调用activeCount获得该组中活动线程的数量,一旦这个数组进行了分配,并用enumerate方法遍历,如果线程数增加了,就有可能忽略掉调用activeCount后新增的线程。关于处理线程组逻辑,可以用线程池的executor代替。 
  也许ThreadGroup提供的有用的功能之一就是uncaughtException方法了。Java提供了强大的异常处理机制,有些异常可以通过try/catch捕获或者re-throw,这些都是checked exception,比如IOException和ClassNotFoundException,还有一些是不必要捕获处理的,如NumberFormatException. 
  在Java多线程中提供了一个层次化的机制帮助我们有效的处理uncaught exception. 当一个线程抛出异常时,JVM首先会调用thread里面指定的uncaught exception handler处理异常,如果在thread级没有设置handler,JVM会到当前线程所在的组的exception handler处理异常,如果线程组没有定义uncaughtException方法,JVM会继续寻找上一级的exception handler处理。如果一个handler都没有找到,这默认打出错误栈并推出程序。 
  让们看一个具体的例子: 
  

Java代码 
  1.   import java.lang.Thread.UncaughtExceptionHandler;  
  2.   
  3. public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {  
  4.   
  5.     @Override  
  6.     public void uncaughtException(Thread t, Throwable e) {  
  7.         System.out.printf("Uncaught exception raised and captured in thread  %s : \n", t.getName());  
  8.     }  
  9.   
  10. }  
  11.   
  12. import java.lang.Thread.UncaughtExceptionHandler;  
  13.   
  14. public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {  
  15.   
  16.     @Override  
  17.     public void uncaughtException(Thread t, Throwable e) {  
  18.         System.out.printf("Uncaught exception raised and captured in thread  %s : \n", t.getName());  
  19.     }  
  20.   
  21. }  
  22.   
  23. public class MyThreadGroupWithExceptionHandler extends ThreadGroup {  
  24.   
  25.     public MyThreadGroupWithExceptionHandler(String name) {  
  26.         super(name);  
  27.     }  
  28.   
  29.     @Override  
  30.     public void uncaughtException(Thread t, Throwable e) {  
  31.         System.out.printf("Uncaught exception caught in thread group's uncaughtException %s.\n",this.getName());  
  32.         interrupt();  
  33.     }  
  34.       
  35. }  
  36. public class TestUncaughtException {  
  37.   
  38.     public static void main(String[] args){  
  39.         MyTask task1 = new MyTask();  
  40.         Thread t1 = new Thread(task1,"UncaughtException Task");  
  41.         t1.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());  
  42.         t1.start();  
  43.       
  44.           
  45.         MyThreadGroupWithExceptionHandler group1 = new MyThreadGroupWithExceptionHandler("mythread");  
  46.         MyTask task2 = new MyTask();  
  47.         Thread t2 = new Thread(group1, task2,"Task with group exception handler");  
  48.         t2.start();  
  49.           
  50.         ThreadGroup group2 = new ThreadGroup("mythread");  
  51.         MyTask task3 = new MyTask();  
  52.         Thread.setDefaultUncaughtExceptionHandler(new MyDefaultExceptionHandler());  
  53.         Thread t3 = new Thread(group2, task3, "Task with exception caught by Thread.default");  
  54.         t3.start();  
  55.           
  56.     }  
  57.       
  58. }  


  输出可见异常分别在Thread实例,ThreadGroup,Thread级别被捕获。 

分享到:
评论

相关推荐

    前端大厂最新面试题-controlled_Uncontrolled.docx

    "前端大厂最新面试题-controlled_Uncontrolled" Controlled 和 Uncontrolled 组件是 React 中两个重要的概念,它们之间的区别在于组件的状态管理方式和用户输入处理方式。 Controlled 组件 Controlled 组件是指...

    controlled-uncontrolled-forms-react-源码.rar

    本资源"controlled-uncontrolled-forms-react-源码.rar"包含了这两种形式的React表单实现的源代码,对于深入理解React表单处理机制非常有帮助。 首先,我们来了解一下受控组件。受控组件是React中表单状态管理的...

    inputs-controlled-uncontrolled-refs-userefs

    Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:npm start 在开发模式下运行该应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒...

    singlephase-uncontrolled-rectifier.rar_coursebst_rectifier filte

    单相不可控整流电路是电力电子技术中的基本组件,它在将交流电(AC)转换为直流电(DC)的过程中发挥着至关重要的作用。这种电路通常用于各种低功率电子设备中,比如充电器、电源适配器等。在本文中,我们将详细探讨...

    material-ui-chip-input:使用Material-UI的芯片输入字段

    材料UI芯片输入 ...// uncontrolled input < ChipInput xss=removed xss=removed xss=removed> handleChange ( chips ) } /> // controlled input < ChipInput xss=removed xss=removed xss=removed> handle

    3-Phase UnControlled Rectifier With Ls:3-Phase UnControlled Rectifier With LS 不等于 0-matlab开发

    这是连接电感时的整流三相电源模型。表示电感不为零。

    controlled-uncontrolled-forms-react:不受控制的形式React

    受控和不受控制的React形式该项目是通过引导的。关于回购这个仓库包含了基于类和功能的组件,它们具有在React中使用表单的不同方法。 我使用了带有不同状态管理方法的受控和非受控形式示例。... 打开在浏览器中查看它。...

    react-codemirror2:React的Codemirror集成组件

    UnControlled包含一个简单的包装程序,该包装程序主要由codemirror本身的内部工作提供codemirror ,而Controlled则需要用户进行状态管理,除非通过value正确处理,否则它会阻止Codemirror进行更改。 后者将提供更多...

    格式化字符串漏洞检测1

    CWE-134标识的“Uncontrolled Format String”是指程序中使用了不受限制的用户提供的格式字符串,攻击者可以利用此弱点注入额外的格式指示符,导致程序在处理字符串时出现问题。 ### 检测与分析 - **检测结果为...

    三相 UnControlled Rectifier:Ls=0 的三相 UnControlled Rectifier-matlab开发

    在电力电子领域,三相无控制整流器(UnControlled Rectifier)是一种常见的交流到直流转换装置。本文将深入探讨这种整流器的工作原理、特点,并结合MATLAB这一强大的数学计算软件,来分析和模拟当电感Ls为零时的运行...

    语音识别a complete speech recognition system for the DARPA TIMIT

    《构建完整的语音识别系统:基于DARPA TIMIT与资源管理任务》 语音识别技术是人工智能领域中的一个重要分支,它涉及计算机科学、信号处理、语言学等多个学科,旨在让计算机能够理解和识别人类的口头语言。...

    深度强化学习 - Imitation Learning

    Imitation Learning • Also known as learning...• Hand-crafted rewards can lead to uncontrolled behavior • Two approaches: • Behavior Cloning • Inverse Reinforcement Learning (inverse optimal control)

    HX8363-A_DS

    - **Uncontrolled Power Off**:不受控制的电源关闭情况处理。 - **Content Adaptive Brightness Control (CABC) Function**:内容适应性亮度控制功能,能够根据显示内容自动调节亮度。 #### Command(命令) - **...

    Understanding Clinical Research: Behind the Statistics

    Uncontrolled trials Meta-analysis and systematic review Meta-analysis Systematic Review Week 2: Describing your data The spectrum of data types Definitions Descriptive statistics Inferential ...

    react-2018年React开发者技能图

    - Uncontrolled组件:在特定场景下,无状态的uncontrolled组件也是可行的选择。 7. **性能优化**: - PureComponent与shouldComponentUpdate:React的内置优化,PureComponent执行浅比较,减少不必要的渲染。 - ...

    Yunus, Muhammad - Creating A World Without Poverty; Social Business and the Future of Capitalism

    The Logic of Uncontrolled Growth How Much Consumption? Making Space for a New Set of Voices Solving the Growth Dilemma Notes 11 Putting Poverty in Museums A Better World Starts with Imagination...

    Uncontrolled:很好地理解使用线性变压器块来降压-matlab开发

    在电子工程领域,线性变压器是转换电压的关键元件,它在电源设计中起着至关重要的作用。本主题将深入探讨如何在MATLAB环境中利用线性变压器实现电压降压,并通过GOTO和FROM块进行信号路由,同时利用虚拟仪器如万用表...

    SPC-ADVANCED52-69(PPT 18页).pptx

    2. **不受控变差(Uncontrolled Variation)**: 随时间变化,其模式特征为特殊原因变异,难以预测。 ### 变差实例 在制造过程中,每个零件的可测量尺寸或特性可能会有所不同,这是由材料、机器、操作员和方法之间的...

    Agisoft PhotoScan Professional v1.4.5 Build 7354 Multilingual Linux

    Based on the latest multi-view 3D reconstruction technology, it operates with arbitrary images and is efficient in both controlled and uncontrolled conditions. Photos can be taken from any position, ...

Global site tag (gtag.js) - Google Analytics