Maison > Java > javaDidacticiel > le corps du texte

Implémentation Java de capture d'exceptions multithread Cas exécutable

黄舟
Libérer: 2017-10-16 09:52:37
original
1531 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur la mise en œuvre de la capture d'exceptions multithread Runnable en Java. J'espère que cet article pourra aider tout le monde à comprendre et à maîtriser ces connaissances.

Explication détaillée de l'implémentation de la capture d'exceptions multithread Runnable en Java

1. Contexte :


                 Les exceptions multithread Java ne sont pas renvoyées vers le thread principal, ils sont gérés par eux-mêmes, en externe. L'exception ne peut pas être détectée. Par conséquent, il est nécessaire de réaliser la capture par le thread principal des exceptions des sous-threads.

2. Outils :

Implémentez la classe LayerInitTask de l'interface Runnable, la classe ThreadException, Thread-safe Vector

3. Entrez le vecteur, enregistrez les exceptions, parcourez en externe, jugez et lancez des 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("-----入库成功,发成功完成工作邮件--------"); 
  } 
 
}
Copier après la connexion

5.

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 + ":刷表失败"); 
    } 
  } 
 
}
Copier après la connexion


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal