zoukankan      html  css  js  c++  java
  • Atitit 流水线子线程异常处理 1.1. 大概原理是 FutureTask排除异常 FutureTask.get can throw ExecutionException,can catc

    Atitit 流水线子线程异常处理

    1.1. 大概原理是 FutureTask排除异常 FutureTask.get   can throw ExecutionException,can catch this ex... 1

    1.2. code 1

    1.1. 大概原理是 FutureTaskt throw 异常 FutureTask.get   can throw ExecutionException,can catch this ex...

    Throwable cause = e.getCause(); 

    if(cause.getMessage().contains("sub task err"))

    {

    RunEx re=(RunEx) cause;

    System.out.println(JSON.toJSONString( re.returnObj));

    System.out.println();

    }else

    ExUtil.throwExV2(e);

     

     

    1.2. code

    package com.cnhis.cloudhealth.clinical.clidoctor.clisendadvice.bo;

    import java.util.Map;

    import java.util.concurrent.Callable;

    import java.util.concurrent.ExecutionException;

    import java.util.concurrent.FutureTask;

    import com.alibaba.fastjson.JSON;

    import com.cnhis.cloudhealth.commons.util.oplogutil.AsynUtil;

    import com.cnhis.cloudhealth.util.ExUtil;

    import com.cnhis.cloudhealth.util.RunEx;

    import com.google.common.collect.Maps;

    public class FuturetaskExTest {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    FutureTask tsk= subtask();

    System.out.println("--");

    try {

    tsk.get();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (ExecutionException e) {

    Throwable cause = e.getCause(); 

    if(cause.getMessage().contains("sub task err"))

    {

    RunEx re=(RunEx) cause;

    System.out.println(JSON.toJSONString( re.returnObj));

    System.out.println();

    }else

    ExUtil.throwExV2(e);

    }

    //System.out.println("--");

    }

    public static FutureTask subtask() {

    FutureTask<Object> FutureTask_updateCviBdj=new FutureTask( new Callable<Object>() {

      @Override

      public Object call()   { 

      System.out.println("--e in sub thread");

      

      if("a".equals("a"))

      {

      Map m=Maps.newConcurrentMap();m.put("k", "vv");

       throw new RunEx("sub task err",m);

       

      }

      return "err";

      }

      }) ;

      

       AsynUtil.execMeth_Ays( FutureTask_updateCviBdj,"");

    return FutureTask_updateCviBdj;

    }

    }

  • 相关阅读:
    文件上传
    使用servlet+jdbc+MD5实现用户加密登录
    JDBC入门
    springmvc(三)
    springmvc(二)
    springmvc(一)
    JavaScript总结(一)
    Spring的AOP面向切面编程
    Spring框架(三)
    Spring框架(二)
  • 原文地址:https://www.cnblogs.com/attilax/p/15197668.html
Copyright © 2011-2022 走看看