Home  >  Article  >  Java  >  Java implementation of multi-threaded exception capture Runnable case

Java implementation of multi-threaded exception capture Runnable case

黄舟
黄舟Original
2017-10-16 09:52:371517browse

This article mainly introduces relevant information on the implementation of multi-threaded exception capture Runnable in Java. I hope this article can help everyone understand and master such knowledge. Friends in need can refer to it

Detailed explanation of the implementation of multi-threaded exception capture Runnable in Java

1. Background:

Java multi-threaded exceptions are not thrown to the main thread, handled by themselves, external The exception cannot be caught. Therefore, it is necessary to realize the main thread's capture of sub-thread exceptions.
2, tool:

Layerinittask class, ThreadException class, Vector
3, Think Enter the Vector, record exceptions, traverse externally, judge, and throw exceptions.

4. Code: ​


package step5.exception; 
 
import java.util.Vector; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.TimeUnit; 
 
import com.autonavi.pds.core.incre.impl.LayerInitTask; 
 
public class ThreadException { 
 
  public static void main(String[] args) { 
    try { 
      Vector<String> errRet = new Vector(); 
      ExecutorService pool = Executors.newFixedThreadPool(6); 
      for (int i = 0; i < 6; ++i) { 
        pool.execute(new LayerInitTask(i, errRet)); 
      } 
      pool.shutdown(); 
      pool.awaitTermination(1, TimeUnit.DAYS); 
       
      if (errRet.size() > 0) { 
        System.out.println("根据返回值捕获:exception"); 
        throw new RuntimeException( "入库失败!"); 
      } 
       
    } catch (Exception e) { 
      System.out.println("根据抛出异常捕获:exception"); 
      throw new RuntimeException( "入库失败!"); 
    } 
    System.out.println("-----入库成功,发成功完成工作邮件--------"); 
  } 
 
}


package step5.exception; 
 
import java.util.Vector; 
 
public class LayerInitTask implements Runnable { 
  private int threadNum; 
  private Vector<String> errRet; 
 
  public LayerInitTask(int num, Vector<String> errRet) { 
    this.threadNum = num; 
    this.errRet = errRet; 
  } 
 
  @Override 
  public void run() { 
    try { 
      if (this.threadNum == 3) { 
        throw new RuntimeException( this.threadNum + ":数据格式有误."); 
      } 
      System.out.println(this.threadNum + ":刷表成功"); 
    } catch (Exception e) { 
      this.errRet.add("线程:" + this.threadNum + "运行异常!"); 
      throw new RuntimeException( this.threadNum + ":刷表失败"); 
    } 
  } 
 
}

5. Result:


Exception in thread "pool-1-thread-4" java.lang.RuntimeException: 3:刷表失败 
  at step5.exception.LayerInitTask.run(LayerInitTask.java:23) 
  at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
  at java.lang.Thread.run(Unknown Source) 
Exception in thread "main" java.lang.RuntimeException: 入库失败! 
  at step5.exception.ThreadException.main(ThreadException.java:27) 
2:刷表成功 
1:刷表成功 
5:刷表成功 
0:刷表成功 
4:刷表成功 
根据返回值捕获:exception 
根据抛出异常捕获:exception

The above is the detailed content of Java implementation of multi-threaded exception capture Runnable case. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn