In diesem Artikel werden hauptsächlich relevante Informationen zur Implementierung von Runnable mit mehreren Threads vorgestellt. Ich hoffe, dass dieser Artikel jedem helfen kann, dieses Wissen zu verstehen und zu beherrschen.
Detaillierte Erläuterung der Implementierung des Multithread-Ausnahmeabfangs Runnable in Java
1. Hintergrund:
Java-Multithread-Ausnahmen werden nicht an den Hauptthread geworfen. Sie werden extern von selbst behandelt. Die Ausnahme kann nicht abgefangen werden. Daher ist es notwendig, die Erfassung von Sub-Thread-Ausnahmen durch den Haupt-Thread zu realisieren.
2. Tools:
Implementieren Sie die LayerInitTask-Klasse der Runnable-Schnittstelle, ThreadException-Klasse, Thread-sicheres Vector
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 + ":刷表失败"); } } }
Das obige ist der detaillierte Inhalt vonJava-Implementierung der ausführbaren Multithread-Ausnahmeerfassung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!