首页 > 其他分享 >CompletableFuture.supplyAsync 多线程异常捕获

CompletableFuture.supplyAsync 多线程异常捕获

时间:2023-02-14 14:24:00浏览次数:36  
标签:多线程 log CompletableFuture error null supplyAsync

CompletableFuture.supplyAsync多线程异常捕获

/**
     * 保存错误信息
     */
    public volatile RuntimeException error =  null;
    
    /**
     * 自动发起流程
     * synchronized 保证对error的修改不会被其他因素影响
     */
    @Override
    public synchronized void autoMakeProcess() {
        error = null;
        CompletableFuture.supplyAsync(() -> {
long t1 = System.currentTimeMillis();
            log.info("自动发起流程任务开始");
            safetyComplianceProcessAutoService.plmNewItemStartProcess();
            safetyComplianceProcessAutoService.checkTimeOutStartProcess();
            log.info("自动发起流程任务结束,耗时:{}ms", (System.currentTimeMillis() - t1));
            return true;
        }).exceptionally( e -> {
            if (e != null) {
                log.error("autoMakeProcess error:", e);
                error = new RuntimeException(e);
            }
            return null;
        });
        if (!ForkJoinPool.commonPool().awaitQuiescence(1, TimeUnit.HOURS)) {
            log.error("autoMakeProcess error:  任务执行超时");
        }
        //如果有异常 抛出异常
        if(error != null){
            throw error;
        }
    }

 

标签:多线程,log,CompletableFuture,error,null,supplyAsync
From: https://www.cnblogs.com/yexuba/p/17119422.html

相关文章

  • python 多线程 join
    当一个进程启动之后,会默认产生一个线程。这个线程就是主线程。如果是多线程时,主线程会创建多个线程。主线程执行完成后就会退出。多线程执行完成后也会退出。注意:只有守护......
  • C/C++多线程实现龟兔赛跑
    题⽬:⻳兔赛跑跑道距离50⽶乌⻳(⼀个线程)每秒3⽶不睡觉;兔⼦(⼀个线程)每秒5⽶每跑15⽶睡2秒钟。请模拟⽐赛情况:#include<iostream>#include<thread>#include<......
  • java中的多线程
    多线程​​1、线程概述​​​​1.1进程​​​​1.2线程​​​​2、线程的创建和启动​​​​2.1继承Thread类​​​​2.2实现Runnable接口​​​​2.3继承Thread类和实......
  • 关于适配服务器创建多线程任务的一些见解
    1、首先理解I/O密集和CPU密集CPU密集型CPU密集型,也叫计算密集型,一般是指服务器的硬盘、内存硬件性能相对CPU好很多,或者使用率低很多。系统运行CPU读写I/O(硬盘/内存)时可......
  • 多线程2(设置线程名,同步代码块:给线程加锁)
    继承,不能继承父类的构造方法,如果想要使用,需要重写构造器,然后调用super关键字,就可使用父类的构造方法了(setName方法)给线程设置名字,1用setName方法,2构造器方法   同......
  • JAVA多线程(一)--实现/创建方式
    JAVA多线程(一)--实现/创建方式一、继承Thread类Thread类本质上是一个实现了Runnable接口的实例,代表一个线程的实例。启动线程的唯一方法是调用Thread类的start()方法,sta......
  • SpringBoot实现多线程
    多线程方式一:实现AsyncConfigurer接口配置类实现接口AsyncConfigurer,返回一个ThreadPoolTaskExecutor线程池对象。@Configuration@EnableAsyncpublicclassAsyncCon......
  • 多线程面试题
    实现线程有哪几种方式?4种https://blog.csdn.net/weixin_46217160/article/details/108721306A继承类Thread,重写run()方法,调用Thread类中的start()方法启动线程;MyThrea......
  • 多线程
    继承thread     2        ......
  • Java多线程07——JUC并发包03
    1线程的锁的synchronized、Lock、volatile区别1.1synchronized和volatile区别用法:volatile关键字解决的是变量在多个线程之间的可见性;synchronized关键字解决的是多......