美文网首页
java线程池异常处理

java线程池异常处理

作者: IT小池 | 来源:发表于2023-03-30 09:51 被阅读0次

线程池提交分为 executesubmit,而且 submit是有返回值的,需要 futureTask.get();这样获取异常信息,想要全局同时处理 executesubmit 线程池异常的话,只有自定义线程池,如:

package com.example.demo;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * author xiaochi
 * date  2023/3/31
 */
public class TheadTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /*ExecutorService executorService = Executors.newFixedThreadPool(1);
        System.out.println(executorService.submit(new Task()).get());*/
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 3, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(10)) {
            /**
             * 全局处理线程池异常 execute 与 submit
             * @param r
             * @param t
             */
            @Override
            protected void afterExecute(Runnable r, Throwable t) {
                if (t != null) {
                    System.out.println("异常信息:" + t);
                }
                // 如果是 submit提交,出现异常会走这里
                //如果r的实际类型是FutureTask 那么是submit提交的,所以可以在里面get到异常
                if (r instanceof FutureTask){
                    FutureTask<?> futureTask = (FutureTask<?>) r;
                    try {
                        futureTask.get();
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("线程池submit提交,异常处理:"+e);
                    }
                }
            }
        };
        threadPoolExecutor.submit(new Task());
        threadPoolExecutor.shutdown();
    }
}

class Task implements Runnable{

    @Override
    public void run() {
        System.out.println("进来了");
        int i = 1 / 0;
    }
}

如此使用全局自定义的线程池就ok了。

相关文章

  • Java线程池异常处理

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

  • Java线程池异常处理方案

    执行多线程并发任务的时候,如果任务类型相同,一般会考虑使用线程池,一方面利用了并发的优势,一方面避免创建大量线程得...

  • python3 线程池和异常处理

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

  • 线程池异常处理

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

  • Java多线程异常处理

    线程异常处理 Java中每个线程的异常处理是相互独立的,一个线程产生的异常不会影响其他线程的正常运行。因此,也不能...

  • Java线程池异常处理正确姿势

    假设我们有一个线程池,由于程序需要,我们向该线程池中提交了好多好多任务,但是 这些任务都没有对异常进行try ca...

  • Java面试题——多线程

    Java面试题——多线程 1,什么是线程池? 线程池是多线程的一种处理方式,处理过程中将任务提交给线程池,任务执行...

  • 【JAVA提升】- 线程、线程池、并发包(3)

    1.线程池(java.util.concurrent) 为什么要有线程池 ? 我们知道。使用线程来处理任务,可以达...

  • Java高并发系列——检视阅读(三)

    JAVA线程池 线程池实现原理 类似于一个工厂的运作。 当向线程池提交一个任务之后,线程池的处理流程如下: 判断是...

  • 线程池设计

    使用线程池的场合 单个任务处理时间短 将需处理的任务数量大 使用Java线程池好处 1、使用new Thread(...

网友评论

      本文标题:java线程池异常处理

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