Java中如何捕获其他线程抛出的异常

2023-11-06

如Java中另一个线程抛出的异常

可以使用公共静态接口Thread.UncaughtExceptionHandler完成。

Thread.UncaughtExceptionHandler是当线程因未捕获的异常而突然终止时调用的处理程序接口。

当一个线程由于未捕获的异常而即将终止时,Java虚拟机将使用它来 查询线程的 UncaughtExceptionHandler  Thread.getUncaughtExceptionHandler(),并将调用该处理程序的 uncaughtException方法,并将该线程和异常作为参数传递。如果某个线程没有 显式设置其UncaughtExceptionHandler,则其ThreadGroup对象将充当其 UncaughtExceptionHandler。如果ThreadGroup对象没有处理异常的特殊要求,它可以将调用转发到默认的未捕获异常处理程序

一个简单的例子:

package com.vista;

/**
 * Created by VISTA on 2018/12/28.
 * Java中如何捕获另一个线程抛出的异常?
 * 如下是示例
 */
public class CatchAnExecptionThrownByAnotherThread {

    public static void main(String[] args) {
        // create our uncaught exception handler
        Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
            public void uncaughtException(Thread th, Throwable ex) {
                System.out.println("Uncaught exception: " + ex);
            }
        };

// create another thread
        Thread otherThread = new Thread() {
            public void run() {
                System.out.println("Sleeping ...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    System.out.println("Interrupted.");
                }
                System.out.println("Throwing exception ...");
                throw new RuntimeException();//主动抛出异常
            }
        };

// set our uncaught exception handler as the one to be used when the new thread
// throws an uncaught exception
        otherThread.setUncaughtExceptionHandler(handler);

// start the other thread - our uncaught exception handler will be invoked when
// the other thread throws an uncaught exception
        otherThread.start();
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何捕获其他线程抛出的异常 的相关文章

  • Qt的Tcp服务器多线程编程-附带代码展示

    Qt的Tcp服务器多线程编程 附带代码展示 该程序主要实现tcp服务器如何使用多线程的方式来连接多个客户端 此文章没有实现客户端的多线程编程 创建子线程时需要注意的点 1 子线程与主线程之间交互数据时 应采用信号槽的方式 2 子线程中实例化
  • JAVA多人聊天室(多线程基础聊天室可以私聊/群聊)

    创建一个类定义聊天的规则 package com test tcpmap 该程序定义了聊天的规则 public interface CrazyitProtocol 定义协议字符串的长度 int PROTOCOL LEN 2 下面是一些协议字
  • 无线传感网必知必会

    一 填空题 传感器网络三大基本要素 传感器 感知对象 用户 观测者 传感器节点的基本功能模块包括 数据采集模块 数据处理和控制模块 通信模块 供电模块 四个 其中 通信模块 能量消耗最大 传感器节点通信模块的工作模式有 发送 接收 空闲 睡
  • 静态代理模式

    package com kuang Demo04 静态代理总结 真实对象和代理对象都要实现同一个接口 代理对象要代理真实对象 好处 代理对象可以做很多真实对象做不了的事情 真实对象可以专注做自己的事情 public class Static
  • 线程安全的单例模式

    线程安全的单例模式 单例模式 属于创建类型的一种常用的软件设计模式 通过单例模式创建的类在当前进程中只有一个实例 一份资源只能被申请加载一次 如何实现 饿汉模式 资源在程序初始化的时候就去加载 后边使用的时候直接使用 使用会非常流畅 但是有
  • qt多线程使用方式

    有5个方式 可以参考这个博客 Qt 中开启线程的五种方式 qt 线程 lucky billy的博客 CSDN博客 注 为了实现更加灵活的线程管理 因为这5种都有一些不方便之处 QThread需要子类化且不能传参 moveToThread不能
  • Disruptor 详解

    Disruptor 详解 想了解一个项目 最好的办法就是 把它的源码搞到本地自己捣鼓 在网上看了 N 多人对 Disruptor 速度的吹捧 M 多人对它的机制分析 就连 Disruptor 官方文档中 也 NB 哄哄自诩 At LMAX
  • volatile和synchronized的区别

    共性 volatile与synchronized都用于保证多线程中数据的安全 区别 1 volatile修饰的变量 jvm每次都从主存 主内存 中读取 而不会从寄存器 工作内存 中读取 而synchronized则是锁住当前变量 同一时刻只
  • Future 和 Callable

    一 Runnable 缺陷 不能返回一个返回值 不能抛出 checked Execption 二 Callable接口 类似于Runnable 被其他线程执行的任务 实现call方法 有返回值 三 Future的作用 Callable和Fu
  • Java使用多线程导入数据到Oracle中

    Oracle中的设置 多线程导入数据到Oracle中 如果是自己设置主键的值 那么肯定会遇到主键冲突的问题 例如线程A计算出的id为10 max id 1 在A线程还没有完成导入时线程B用相同办法得到的id也是10 这时两个线程都请求插入数
  • WEB-7-多线程

    多线程 一 背景 二 认识线程 Thread 1 理解 2 进程和线程的区别 高频面试题 3 使用代码创建多线程 三 线程的相关操作 1 创建线程 1 方法一 继承 Thread 类 2 方法二 实现 Runnable 接口 3 其它方法
  • 线程封闭概念

    线程封闭概念 为什么要有线程封闭这个概念呢 多线程中访问共享可变数据时 涉及到线程间数据同步的问题 并不是所有时候都需要共享数据 所以线程封闭概念就出来了 在Java中线程封闭该怎么做呢 可以通过两个方法来做 ThreadLocal 1 T
  • C++-std::unique_lock介绍和简单使用

    unique lock std unique lock比std lock guard更灵活 这种灵活性主要体现在以下几点 lock guard在构造时或者构造前 std adopt lock 就已经获取互斥锁 并且在作用域内保持获取锁的状态
  • [QT编程系列-25]:多线程机制 - QThread和MoveToThread简介

    目录 第1章 简介 1 1 多线程的目的 1 2 QThread多线程使用方法 1 3 QT支持多线的步骤 第2章 QThread 2 1 概述 2 2 moveToThread 第1章 简介 1 1 多线程的目的 QThread类提供了一
  • JAVA使用线程池查询大批量数据

    前言 在开发过程中可能会碰到某些独特的业务 比如查询全部表数据 数据量过多会导致查询变得十分缓慢 虽然在大多数情况下并不需要查询所有的数据 而是通过分页或缓存的形式去减少或者避免这个问题 但是仍然存在需要这样的场景 比如需要导出所有的数据到
  • C++多线程(并发、进程、线程的基本概念和综述)

    并发 进程 线程的基本概念和综述 并发 并发表示两个或者更多任务 独立的活动 同时发生 进行 例如 一面唱歌一面弹琴 一面走路一面说话 画画的时候听小说等 回归到计算机领域 所谓并发 就是一个程序同时执行多个独立的任务 以往计算机只有单核C
  • python网络爬虫实战——实时抓取西刺免费代理ip

    参考网上高手示例程序 利用了多线程技术 Python版本为2 7 coding utf8 import urllib2 import re import threading import time rawProxyList checkedP
  • QT实现多线程,以及子线程调用主线程方法与变量

    实现思路 第一步需要将子线程声明为主线程的友元类 第二步是将主线程类对象的地址通过信号槽传递给子线程中创建的对象 使得子线程能访问主线程的数据的 1 子线程 displayresult h 头文件 伪代码 include tabwindow
  • 多线程编程与性能优化

    引言 在上一篇的入门篇中 我们对Android线程的基础概念和多线程编程模型有了初步了解 本篇将深入探讨多线程编程技术和性能优化策略 以提升应用的效率和响应性 高级多线程编程技术 使用线程池管理线程 线程池是一组预先创建的线程 用于执行任务
  • TaskDecatator用法

    在Spring框架中 TaskDecorator 是一个接口 它可以用来自定义由 ThreadPoolTaskExecutor 或其他任务执行器管理的任务的装饰行为 这通常用于在执行任务之前和之后添加某些上下文相关的行为 比如设置线程上下文

随机推荐

  • springboot调整请求头大小_解决Springboot get请求是参数过长的情况

    问题原因 Springboot get请求是参数过长抛出异常 Request header is too large 的问题 错误描述 java lang IllegalArgumentException Request header is
  • python3.8+pytorch 1.7.0+cuda10.2+cuDNN

    本文是在电脑中直接安装cuda10 2的过程 如果是要在anaconda环境中安装的话 可以直接只在虚拟环境中使用命令进行安装 用以下链接中的过程即可 在anaconda虚拟环境中安装pytorch和cuda教程 安装过程中看到的不错的教程
  • CVE-2022-30190复现及原理

    今天各厂商都在发布CVE 2022 30190的安全通告 作为一个与Office有关的RCE漏洞 其原理并不复杂 但利用非常简单无脑甚至不用点击 以后钓鱼肯定要经常用 这里简单复现分析下 环境 Win10 0 16299 32位 Micro
  • OLED透明屏原彩优势和特点解析:开创显示技术新时代

    OLED透明屏 原彩作为一项领先的显示技术 正以其卓越的性能和创新的设计特点引起广泛关注 本文将通过深入探讨OLED透明屏 原彩的优势和特点 应用领域 技术发展以及未来前景等方面内容 并结合具体数据 报告和行业动态 为读者提供专业可信的信息
  • java设置httpheaders_HttpClient 请求添加Header头部信息

    HTTP消息可以包含许多描述消息属性的标头 例如内容长度 内容类型 授权等 HttpClient提供了检索 添加 删除和枚举标头的方法 在下面的教程中 我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法 Maven
  • 蓬莱小课:统计学中18种数据分析方法汇总

    Part1描述统计 描述统计是通过图表或数学方法 对数据资料进行整理 分析 并对数据的分布状态 数字特征和随机变量之间关系进行估计和描述的方法 描述统计分为集中趋势分析和离中趋势分析和相关分析三大部分 集中趋势分析 集中趋势分析主要靠平均数
  • 【Pytorch】第 5 章 :解决多臂老虎机问题

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 【C++】this指针的理解和__thiscall的调用方式

    我们可以从以下三方面来认识this指针 一 为什么会产生this指针 二 this指针的特点 三 thiscall的调用方式 四 问题 一 为什么会产生this指针 class Box public int volume int heigh
  • es guass 案例

    analyze analyzer standard curl XPOST http 192 168 1 47 9200 searchtube search analyzer ik max word analyzer ik max word
  • 国内常见pip使用镜像源地址

    清华大学镜像源 https pypi tuna tsinghua edu cn simple 阿里云镜像源 http mirrors aliyun com pypi simple 中国科技大学镜像源 https pypi mirrors u
  • vmware 共享文件夹hgfs没有显示

    挂载共享文件夹 当完成共享文件夹之后 会出现在 mnt hgfs目录下 如果没有hgfs文件夹则创建 然后进入虚拟机挂载文件夹 然后执行sudo vmhgfs fuse host mnt hgfs 但是有时候并不显示共享的文件夹 但是如果使
  • c++11之数组array

    c 11数组 定义 注意事项 例子 STL array vector list比较 定义 C 11后 标准库引入了更现代化的数组std array cppreference com是这样介绍的 定义于头文件 template lt clas
  • Windows下如何查看被占用进程及结束进程?

    Windows下如何查看被占用进程及结束进程 查找所有运行的端口命令 netstat ano 查找被占用端口对应的PID netstat aon findstr 2990 查找指定PID的进程 tasklist findstr 1004 结
  • C++学习(十六)有关dump的理解

    1 作为动词 转存的意思 将内容从一个位置转存到另一个位置 2 作为名词 转存文件的意思 某些程序生成的文件 比如操作系统生成的调试日志文件
  • Action 无参数委托详解

    C 委托Action Action
  • opencv实战——机器视觉检测和计数

    引言 在机器视觉中 有时需要对产品进行检测和计数 其难点无非是对于产品的图像分割 由于之前网购的维生素片 有时候忘了今天有没有吃过 就想对瓶子里的药片计数 在学习opencv以后 希望实现对于维生素片分割计数算法 本次实战在基于形态学的基础
  • 跳转关键字

    跳转关键字 break continue break 不能单独存在的 可以用在switch和循环中 表示结束 跳出的意思 代码示例 1 吃1 5号包子 for int i 1 i lt 5 i System out println 在吃第
  • 【C++】深入模板

    文章目录 1 反向迭代器的优化 1 1优化目标 1 2优化 1 3typename的其他使用方式 1 4适合所有容器的打印函数 2 非类型模板参数 3 函数模板特化 4 类模板特化 4 1全特化 4 2偏特化 4 2 1部分模板参数类型特化
  • 在OpenSSL中添加自定义加密算法

    在OpenSSL中添加自定义加密算法 1 加密算法的加载 1 2 密码算法接口的定义 4 3 示例 8 1 加密算法的加载 在调用加密算法之前 通过调用OpenSSL add all algorithms来加载加密算法函数和单向散列算法函数
  • Java中如何捕获其他线程抛出的异常

    如Java中另一个线程抛出的异常 可以使用公共静态接口Thread UncaughtExceptionHandler完成 Thread UncaughtExceptionHandler是当线程因未捕获的异常而突然终止时调用的处理程序接口 当