Java子线程抛异常传递到主线程

    public static void main(String[] args) {
        try {
            AtomicLong count = new AtomicLong(0);
            Thread th = Thread.currentThread();
            BusinessRuntimeException err = BusinessRuntimeException.with("0000", "请求成功!");
//            Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandle());
            for (int i = 0; i < 100; i++) {
                executor.execute(new Test(i, count, th, err));
            }
            System.out.println( "park() >>>>>>>>>>> th = " + th.getName() + " >>>>>>  count" + count.get());
            LockSupport.park(th);
//            th.join();
            System.out.println( "end >>>>>>>>>>> th = " + th.getName()+ " >>>>>>  count" + count.get());
            ((ExecutorService) executor).shutdown();

            if ( !"0000".equals(err.getExceptionCode()) ) {
                throw (BusinessRuntimeException) err.getCause();
            }

        } catch (Exception e) {
            System.out.println("-----------------------");
            e.printStackTrace();
        }

    }



    static class Test extends Thread {
        private int i;
        private AtomicLong count;
        private Thread th ;
        private BusinessRuntimeException error;

        public Test(int i, AtomicLong count, Thread th, BusinessRuntimeException error) {
            this.i = i;
            this.count = count;
            this.th = th;
            if ( "0000".equals(error.getExceptionCode()) ) {
                this.error = error;
            }
        }

        @Override
        public void run() {
            Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
                @Override
                public void uncaughtException(Thread t, Throwable e) {
                    System.out.println("caught " + e);
                    if ( e instanceof BusinessRuntimeException ) {
                        error.initCause(e);
//                        error.getCause().addSuppressed(e);
                        error.setExceptionCode(((BusinessRuntimeException) e).getExceptionCode());
                        System.out.println("i => "+ i + e +" >>>>>>>>............error=" + error.getExceptionCode() + error.getMessage());
                    }
                }
            });

            long get = count.incrementAndGet();
            System.out.println("i => "+ i + " >>>>>>  count" + get + "error=" + error);

            if ( get == 50 ) {
                System.out.println("count ====================> "+ get);
                throw BusinessRuntimeException.with("-0003", "数据异常");
            }

            if ( get == 100 ) {
                System.out.println( "unpark() >>>>>>>>>>> th = " + th.getName());
                LockSupport.unpark(th);
            }

        }
    }

 

public class BusinessRuntimeException extends RuntimeException {

    /**
     * 异常码
     */
    private String exceptionCode;

    public BusinessRuntimeException(String message) {
        super(message);
    }

    public BusinessRuntimeException(String exceptionCode, String message) {
        super(message);
        this.exceptionCode = exceptionCode;
    }

    public String getExceptionCode() {
        return exceptionCode;
    }

    public void setExceptionCode(String exceptionCode) {
        this.exceptionCode = exceptionCode;
    }
}

 

控制台输出:

park() >>>>>>>>>>> th = main >>>>>>  count0
i => 0 >>>>>>  count1error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 40 >>>>>>  count2error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 41 >>>>>>  count3error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 42 >>>>>>  count4error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 43 >>>>>>  count5error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 44 >>>>>>  count6error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 45 >>>>>>  count7error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 46 >>>>>>  count8error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 47 >>>>>>  count9error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 48 >>>>>>  count10error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 49 >>>>>>  count11error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 50 >>>>>>  count12error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 51 >>>>>>  count13error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 52 >>>>>>  count14error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 53 >>>>>>  count15error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 54 >>>>>>  count16error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 55 >>>>>>  count17error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 56 >>>>>>  count18error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 57 >>>>>>  count19error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 58 >>>>>>  count20error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 59 >>>>>>  count21error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 60 >>>>>>  count22error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 61 >>>>>>  count23error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 62 >>>>>>  count24error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 63 >>>>>>  count25error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 64 >>>>>>  count26error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 65 >>>>>>  count27error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 66 >>>>>>  count28error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 67 >>>>>>  count29error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 68 >>>>>>  count30error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 69 >>>>>>  count31error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 70 >>>>>>  count32error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 71 >>>>>>  count33error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 72 >>>>>>  count34error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 73 >>>>>>  count35error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 74 >>>>>>  count37error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 75 >>>>>>  count38error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 1 >>>>>>  count36error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 76 >>>>>>  count39error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 77 >>>>>>  count40error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 78 >>>>>>  count41error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 79 >>>>>>  count42error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 80 >>>>>>  count44error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 81 >>>>>>  count45error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 82 >>>>>>  count46error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 83 >>>>>>  count47error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 84 >>>>>>  count48error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 85 >>>>>>  count49error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 86 >>>>>>  count50error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
count ====================> 50
caught com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 数据异常
i => 86com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 数据异常 >>>>>>>>..............................error=-0003请求成功!
i => 87 >>>>>>  count51error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 88 >>>>>>  count52error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 89 >>>>>>  count53error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 90 >>>>>>  count54error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 91 >>>>>>  count55error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 92 >>>>>>  count56error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 93 >>>>>>  count57error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 94 >>>>>>  count58error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 95 >>>>>>  count59error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 96 >>>>>>  count60error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 97 >>>>>>  count61error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 98 >>>>>>  count62error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 99 >>>>>>  count63error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 2 >>>>>>  count43error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 3 >>>>>>  count64error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 4 >>>>>>  count65error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 5 >>>>>>  count66error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 6 >>>>>>  count67error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 7 >>>>>>  count68error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 8 >>>>>>  count69error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 9 >>>>>>  count70error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 10 >>>>>>  count71error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 11 >>>>>>  count72error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 12 >>>>>>  count73error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 13 >>>>>>  count74error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 14 >>>>>>  count75error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 15 >>>>>>  count76error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 16 >>>>>>  count77error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 17 >>>>>>  count78error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 18 >>>>>>  count79error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 19 >>>>>>  count80error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 20 >>>>>>  count81error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 21 >>>>>>  count82error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 22 >>>>>>  count83error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 23 >>>>>>  count84error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 24 >>>>>>  count85error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 25 >>>>>>  count86error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 26 >>>>>>  count87error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 27 >>>>>>  count88error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 28 >>>>>>  count89error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 29 >>>>>>  count90error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 30 >>>>>>  count91error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 31 >>>>>>  count92error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 32 >>>>>>  count93error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 33 >>>>>>  count94error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 34 >>>>>>  count95error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 35 >>>>>>  count96error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 36 >>>>>>  count97error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 37 >>>>>>  count98error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 38 >>>>>>  count99error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
i => 39 >>>>>>  count100error=com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 请求成功!
unpark() >>>>>>>>>>> th = main
end >>>>>>>>>>> th = main >>>>>>  count100
-----------------------
com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException: 数据异常
	at com.tcl.multimedia.nretail.tsale.server.exception.BusinessRuntimeException.with(BusinessRuntimeException.java:47)
	at com.tcl.multimedia.nretail.tsale.server.service.impl.certificate.CertificateServiceImpl$Test.run(CertificateServiceImpl.java:1072)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

进程已结束,退出代码0

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿丶小伙计

请赏我点铜板买喵粮自己吃,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值