Java多线程 自己实现异常处理器
发布日期:2021-06-30 13:12:03
浏览次数:2
分类:技术文章
本文共 2247 字,大约阅读时间需要 7 分钟。
文章目录
自己实现异常处理器
自己实现异常处理器有三种方式 :
- 程序统一设置
- 每个线程单独设置
- 每个线程池单独设置
一般开发中使用第一个, 2和3除非有特殊的需求, 可以做.
编写自己的MyUncaughtExceptionHanlder
编写自己的MyUncaughtExceptionHanlder代码如下.
主要是MyUncaughtExceptionHandler 实现了Thread类的 Thread.UncaughtExceptionHandler接口. 重写了uncaughtException 方法. 在此方法类, 可以对线程的异常做一些操作. 例如在生产环境中 , 可以记录异常日志. 把异常报警信息给异常系统, 让工作人员知道发生了异常. 此处只是打印了线程和异常信息 同时设置了一个成员变量, 用于设置 异常捕获器的名称.package com.thread.uncaughtexception;import java.util.logging.Level;import java.util.logging.Logger;/** * 类名称:MyUncaughtExceptionHandler * 类描述: 自己的线程异常处理器 * * @author: https://javaweixin6.blog.csdn.net/ * 创建时间:2020/8/30 19:43 * Version 1.0 */public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { // 异常处理器的名字 private String name; public MyUncaughtExceptionHandler(String name) { this.name = name; } @Override public void uncaughtException(Thread thread, Throwable e) { Logger logger = Logger.getAnonymousLogger(); logger.log(Level.WARNING," 线程异常,终止"+thread.getName(),e); System.out.println(name +"捕获了异常" + thread.getName()+"异常"+e); }}
使用自己的UncaughtExceptionHandler
如下的代码中, 使用了自己的UncaughtExceptionHandler . 从而不需要任何一行的try catch代码.
主要的代码为设置了自己的异常处理器Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler("线程异常捕获器"));
package com.thread.uncaughtexception;/** * 类名称:UseOwnUncaughtExceptionHandler * 类描述: 使用自己的UncaughtExceptionHandler * * @author: https://javaweixin6.blog.csdn.net/ * 创建时间:2020/8/30 19:48 * Version 1.0 */public class UseOwnUncaughtExceptionHandler implements Runnable { public static void main(String[] args) throws InterruptedException { Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler("线程异常捕获器")); new Thread(new UseOwnUncaughtExceptionHandler(),"MyThread-1").start(); Thread.sleep(300); new Thread(new UseOwnUncaughtExceptionHandler(),"MyThread-2").start(); Thread.sleep(300); new Thread(new UseOwnUncaughtExceptionHandler(),"MyThread-3").start(); Thread.sleep(300); new Thread(new UseOwnUncaughtExceptionHandler(),"MyThread-4").start(); } @Override public void run() { throw new RuntimeException(); }}
控制台打印如下 , 成功的捕获了异常, 并且打印了异常信息.
转载地址:https://javaweixin6.blog.csdn.net/article/details/108309969 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月09日 22时29分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java 并发学习记录之 Lock 锁
2019-05-01
Java源码学习之ArrayList
2019-05-01
SpringBoot配置文件的优先级
2019-05-01
Spring-Security-Oauth2第一篇之授权认证
2019-05-01
Spring-Security-Oauth2第二篇之配置客户端
2019-05-01
JedisCommand接口说明
2019-05-01
Docker + mysql主从配置
2019-05-01
Spring + MyBatis + MySQL主从分离
2019-05-01
Consul 使用记录
2019-05-01
Java集合学习之LinkedList
2019-05-01
Spring Security Oauth2 令牌增加额外信息
2019-05-01
Spring Security Oauth2 如何增加自定义授权模式
2019-05-01
logback + Kafka + logstash 集成
2019-05-01
在SpringBoot1.5.x下如何使RedisTokenStore集群化
2019-05-01
Spring Cloud Consul应用下线后,健康检查自动删除无效服务
2019-05-01
spring cloud consul 应用的多实例名的解决
2019-05-01
kafka设置某个topic的数据过期时间
2019-05-01