java多线程:线程体往外抛出异常的处理机制实践
生活随笔
收集整理的這篇文章主要介紹了
java多线程:线程体往外抛出异常的处理机制实践
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1當(dāng)線程的線程體內(nèi)部無(wú)捕獲異常,將異常拋出線程體外,不同情況下,程序處理機(jī)制
測(cè)試類
1 package com.ehking.bankchannel.domesticremit.facade.impl; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.concurrent.Executor; 6 import java.util.concurrent.Executors; 7 8 9 public class ThreadTest { 10 11 private static Executor executor=Executors.newCachedThreadPool(); 12 13 14 public static void main(String[] args) { 15 test01(); 16 //test02(); 17 } 18 19 /** 20 * 線程池,主線程往線程池提交任務(wù)(子線程) 21 * 如果任務(wù)中有往外拋出異常,主線程并不會(huì)捕獲異常。 22 * 是線程池捕獲了任務(wù)的異常 23 */ 24 public static void test02(){ 25 26 ThreadTask aTask=new ThreadTask(1); 27 ThreadTask aTask2=new ThreadTask(2); 28 ThreadTask aTask3=new ThreadTask(6); 29 List<ThreadTask> aList=new ArrayList<ThreadTask>(); 30 aList.add(aTask); 31 aList.add(aTask2); 32 aList.add(aTask3); 33 try { 34 for(ThreadTask a:aList){ 35 executor.execute(a); 36 } 37 System.out.println("ThreadTest.test02(沒有執(zhí)行)"); 38 } catch (Exception e) { 39 System.out.println("ThreadTest.test02()"+e); 40 } 41 42 43 } 44 /** 45 * 如果用匿名線程,匿名線程中有拋出異常,無(wú)捕獲的話,主線程是會(huì)捕獲這個(gè)異常 46 */ 47 public static void test01(){ 48 System.out.println("ThreadTest.test01()==>主線程運(yùn)行開始"); 49 final List<String> list=new ArrayList<String>(); 50 try { 51 list.add("sxf"); 52 list.add("chn"); 53 54 Thread thread=new Thread(new Runnable() { 55 56 @Override 57 public void run() { 58 System.out 59 .println("ThreadTest.test01().new Runnable() {...}.run()子線程加愛"); 60 list.add("love"); 61 System.out 62 .println("ThreadTest.test01().new Runnable() {...}.run()子線程拋出異常"); 63 int a=3/0; 64 System.out 65 .println("ThreadTest.test01().new Runnable() {...}.run()z縣城結(jié)束"); 66 } 67 }); 68 thread.start(); 69 70 71 } catch (Exception e) { 72 System.out.println("ThreadTest.test01()子線程拋出異常"+e); 73 } 74 75 try { 76 Thread.sleep(3000L); 77 } catch (InterruptedException e) { 78 // TODO Auto-generated catch block 79 e.printStackTrace(); 80 } 81 for(String aString:list){ 82 System.out.println("ThreadTest.test01()打印==>"+aString); 83 } 84 System.out.println("ThreadTest.test01()==>主線程運(yùn)行結(jié)束"); 85 } 86 } View Code?線程類
1 package com.ehking.bankchannel.domesticremit.facade.impl; 2 3 public class ThreadTask implements Runnable{ 4 5 private int a; 6 7 public ThreadTask(int a){ 8 this.a=a; 9 } 10 11 @Override 12 public void run() { 13 if(a%2==0){ 14 System.out.println("ThreadTask.run()【"+a+"】運(yùn)行正常......."); 15 }else{ 16 System.out.println("ThreadTask.run()【"+a+"】拋出異常"); 17 int s=2/0; 18 } 19 20 } 21 22 23 } View Code?
總結(jié)
以上是生活随笔為你收集整理的java多线程:线程体往外抛出异常的处理机制实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Lightoj-1356 Prime I
- 下一篇: Git在服务器安装完成后续工作