前两天翻阅《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都没有找到,这默认打出错误栈并推出程序。
让们看一个具体的例子:
- import java.lang.Thread.UncaughtExceptionHandler;
- public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
- @Override
- public void uncaughtException(Thread t, Throwable e) {
- System.out.printf("Uncaught exception raised and captured in thread %s : \n", t.getName());
- }
- }
- import java.lang.Thread.UncaughtExceptionHandler;
- public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
- @Override
- public void uncaughtException(Thread t, Throwable e) {
- System.out.printf("Uncaught exception raised and captured in thread %s : \n", t.getName());
- }
- }
- public class MyThreadGroupWithExceptionHandler extends ThreadGroup {
- public MyThreadGroupWithExceptionHandler(String name) {
- super(name);
- }
- @Override
- public void uncaughtException(Thread t, Throwable e) {
- System.out.printf("Uncaught exception caught in thread group's uncaughtException %s.\n",this.getName());
- interrupt();
- }
- }
- public class TestUncaughtException {
- public static void main(String[] args){
- MyTask task1 = new MyTask();
- Thread t1 = new Thread(task1,"UncaughtException Task");
- t1.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
- t1.start();
- MyThreadGroupWithExceptionHandler group1 = new MyThreadGroupWithExceptionHandler("mythread");
- MyTask task2 = new MyTask();
- Thread t2 = new Thread(group1, task2,"Task with group exception handler");
- t2.start();
- ThreadGroup group2 = new ThreadGroup("mythread");
- MyTask task3 = new MyTask();
- Thread.setDefaultUncaughtExceptionHandler(new MyDefaultExceptionHandler());
- Thread t3 = new Thread(group2, task3, "Task with exception caught by Thread.default");
- t3.start();
- }
- }
输出可见异常分别在Thread实例,ThreadGroup,Thread级别被捕获。
相关推荐
"前端大厂最新面试题-controlled_Uncontrolled" Controlled 和 Uncontrolled 组件是 React 中两个重要的概念,它们之间的区别在于组件的状态管理方式和用户输入处理方式。 Controlled 组件 Controlled 组件是指...
本资源"controlled-uncontrolled-forms-react-源码.rar"包含了这两种形式的React表单实现的源代码,对于深入理解React表单处理机制非常有帮助。 首先,我们来了解一下受控组件。受控组件是React中表单状态管理的...
Create React App入门该项目是通过引导的。可用脚本在项目目录中,可以运行:npm start 在开发模式下运行该应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒...
单相不可控整流电路是电力电子技术中的基本组件,它在将交流电(AC)转换为直流电(DC)的过程中发挥着至关重要的作用。这种电路通常用于各种低功率电子设备中,比如充电器、电源适配器等。在本文中,我们将详细探讨...
材料UI芯片输入 ...// uncontrolled input < ChipInput xss=removed xss=removed xss=removed> handleChange ( chips ) } /> // controlled input < ChipInput xss=removed xss=removed xss=removed> handle
这是连接电感时的整流三相电源模型。表示电感不为零。
受控和不受控制的React形式该项目是通过引导的。关于回购这个仓库包含了基于类和功能的组件,它们具有在React中使用表单的不同方法。 我使用了带有不同状态管理方法的受控和非受控形式示例。... 打开在浏览器中查看它。...
UnControlled包含一个简单的包装程序,该包装程序主要由codemirror本身的内部工作提供codemirror ,而Controlled则需要用户进行状态管理,除非通过value正确处理,否则它会阻止Codemirror进行更改。 后者将提供更多...
CWE-134标识的“Uncontrolled Format String”是指程序中使用了不受限制的用户提供的格式字符串,攻击者可以利用此弱点注入额外的格式指示符,导致程序在处理字符串时出现问题。 ### 检测与分析 - **检测结果为...
在电力电子领域,三相无控制整流器(UnControlled Rectifier)是一种常见的交流到直流转换装置。本文将深入探讨这种整流器的工作原理、特点,并结合MATLAB这一强大的数学计算软件,来分析和模拟当电感Ls为零时的运行...
《构建完整的语音识别系统:基于DARPA TIMIT与资源管理任务》 语音识别技术是人工智能领域中的一个重要分支,它涉及计算机科学、信号处理、语言学等多个学科,旨在让计算机能够理解和识别人类的口头语言。...
Imitation Learning • Also known as learning...• Hand-crafted rewards can lead to uncontrolled behavior • Two approaches: • Behavior Cloning • Inverse Reinforcement Learning (inverse optimal control)
- **Uncontrolled Power Off**:不受控制的电源关闭情况处理。 - **Content Adaptive Brightness Control (CABC) Function**:内容适应性亮度控制功能,能够根据显示内容自动调节亮度。 #### Command(命令) - **...
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 ...
- Uncontrolled组件:在特定场景下,无状态的uncontrolled组件也是可行的选择。 7. **性能优化**: - PureComponent与shouldComponentUpdate:React的内置优化,PureComponent执行浅比较,减少不必要的渲染。 - ...
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...
在电子工程领域,线性变压器是转换电压的关键元件,它在电源设计中起着至关重要的作用。本主题将深入探讨如何在MATLAB环境中利用线性变压器实现电压降压,并通过GOTO和FROM块进行信号路由,同时利用虚拟仪器如万用表...
2. **不受控变差(Uncontrolled Variation)**: 随时间变化,其模式特征为特殊原因变异,难以预测。 ### 变差实例 在制造过程中,每个零件的可测量尺寸或特性可能会有所不同,这是由材料、机器、操作员和方法之间的...
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, ...