Java多线程 自己实现异常处理器
发布日期:2021-06-30 13:12:03 浏览次数:3 分类:技术文章

本文共 2247 字,大约阅读时间需要 7 分钟。

文章目录

自己实现异常处理器

自己实现异常处理器有三种方式 :

  1. 程序统一设置
  2. 每个线程单独设置
  3. 每个线程池单独设置

一般开发中使用第一个, 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java多线程 线程未捕获的异常-常见的面试问题
下一篇:Java多线程 处理子线程异常的两种策略.(UncaughtExceptionHandler的介绍)

发表评论

最新留言

很好
[***.229.124.182]2024年04月10日 02时15分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章