1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java多线程:线程体往外抛出异常的处理机制实践

java多线程:线程体往外抛出异常的处理机制实践

时间:2022-01-06 16:10:19

相关推荐

java多线程:线程体往外抛出异常的处理机制实践

1当线程的线程体内部无捕获异常,将异常抛出线程体外,不同情况下,程序处理机制

测试类

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 11private static Executor executor=Executors.newCachedThreadPool();121314public static void main(String[] args) {15 test01();16 //test02();17}1819/**20* 线程池,主线程往线程池提交任务(子线程)21* 如果任务中有往外抛出异常,主线程并不会捕获异常。22* 是线程池捕获了任务的异常23*/24public 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(没有执行)");38 } catch (Exception e) {39 System.out.println("ThreadTest.test02()"+e);40 }41 42 43}44/**45* 如果用匿名线程,匿名线程中有抛出异常,无捕获的话,主线程是会捕获这个异常46*/47public static void test01(){48 System.out.println("ThreadTest.test01()==>主线程运行开始");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 @Override57 public void run() {58 System.out59 .println("ThreadTest.test01().new Runnable() {...}.run()子线程加爱");60 list.add("love");61 System.out62 .println("ThreadTest.test01().new Runnable() {...}.run()子线程抛出异常");63 int a=3/0;64 System.out65 .println("ThreadTest.test01().new Runnable() {...}.run()z县城结束");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 block79 e.printStackTrace();80 }81 for(String aString:list){82 System.out.println("ThreadTest.test01()打印==>"+aString);83 }84 System.out.println("ThreadTest.test01()==>主线程运行结束");85}86 }

View Code

线程类

1 package com.ehking.bankchannel.domesticremit.facade.impl; 2 3 public class ThreadTask implements Runnable{ 4 5private int a; 67public ThreadTask(int a){ 8 this.a=a; 9}1011@Override12public void run() {13 if(a%2==0){14 System.out.println("ThreadTask.run()【"+a+"】运行正常.......");15 }else{16 System.out.println("ThreadTask.run()【"+a+"】抛出异常");17 int s=2/0;18 }19 20}21 2223 }

View Code

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。