美文网首页
自定义线程池以及其异常统一处理

自定义线程池以及其异常统一处理

作者: flyjar | 来源:发表于2025-07-12 12:45 被阅读0次

1、先自定一个一个线程池,指定自定义线程生产工厂CustomThreadFactory

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;

@Configuration
public class ThreadPoolConfig {

    @Bean("customThreadPool")
    public ThreadPoolTaskExecutor customThreadPool() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(20);
        executor.setThreadNamePrefix("custom-thread-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
         executor.setThreadFactory(new CustomThreadFactory ());
        executor.initialize();
        return executor;
    }
}    

2、声明线程生产工厂,指定自定义的异常处理类CustomUncaughtExceptionHandler

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

public class CustomThreadFactory implements ThreadFactory {

    private final String namePrefix;
    private final AtomicInteger threadNumber = new AtomicInteger(1);

    public CustomThreadFactory(String namePrefix) {
        this.namePrefix = namePrefix + "-";
    }

    @Override
    public Thread newThread(Runnable r) {
        Thread thread = new Thread(r, namePrefix + threadNumber.getAndIncrement());
        thread.setUncaughtExceptionHandler(new CustomUncaughtExceptionHandler());
        return thread;
    }
}    

3、自定义异常处理类

import java.lang.Thread.UncaughtExceptionHandler;

public class CustomUncaughtExceptionHandler implements UncaughtExceptionHandler {

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.err.println("线程异常捕获: " + t.getName() + " 抛出异常: " + e.getMessage());
        // 这里可以添加统一的异常处理逻辑
        // 例如记录日志、发送告警等
        e.printStackTrace();
    }
}    

4、声明异步service

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncService {

    @Async("customThreadPool")
    public void executeTask() {
        throw new RuntimeException("测试异步任务异常");
    }
}    

5、在controller中调用service

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/test")
    public String test() {
        asyncService.executeTask();
        return "Task submitted";
    }
}    

相关文章

  • kotlin协程

    作用:轻量级的线程,比线程更易用,便本质仍然是线程。 可以自定义线程池,自定义异常处理逻辑。需要自定义Contin...

  • python3 线程池和异常处理

    引用 线程池的基本使用as_completedwaitmap 线程池的异常处理 进程池用法 引用 Python中已...

  • HandlerExceptionResolver原理分析

    通常在项目中我们都会做统一的异常处理,那么今天我们就来分析下自定义异常处理的原理。 若有不知道怎么自定义统一的异常...

  • 线程池异常处理

    一个栗子 模拟线程池中任务在执行过程中发生异常。 这段代码在执行中,肯定会报一个除0异常,但是我们不会收到任何错误...

  • 线程池很容易理解的

    线程池介绍 并发队列 线程池原理分析 自定义线程池 文中部分代码使用 lambda 表达式以简化代码。 线程池 什...

  • 异常处理与分析

    1、系统对异常的处理使用统一的异常处理流程: 1、自定义异常类型。 2、自定义错误代码及错误信息。 3、对于可预知...

  • 并发--共享模型之工具

    线程池 1.1 自定义线程池 先自定义任务队列 自定义线程池 测试: 定义拒绝策略接口: 1.2 ThreadPo...

  • 3. Dubbo线程池模型

    dubbo有两种线程池,io线程池、业务线程池以netty作为io框架为例:boss线程池: 主要处理新的连接请求...

  • Java线程池异常处理

    起因 在Java默认的线程池中执行的程序,如果程序产生异常导致线程池里面的线程死掉,完全没有任何信息抛出来,这个是...

  • 统一异常处理,自定义异常处理

    在面试过程中面试官通常会问,你们项目中处理异常是怎么处理的? 源码讲解https://blog.csdn.net/...

网友评论

      本文标题:自定义线程池以及其异常统一处理

      本文链接:https://www.haomeiwen.com/subject/mocknjtx.html