Java 并发:Executor

时间:2022-09-06 16:10:24

异常捕获

以前使用executor的时候,为了记录任务线程的异常退出会使用ThreadFactory来设置线程的UncaughtExceptionHandler,但是按照书上的验证发现,采用executorService.submit执行任务时,线程抛出的异常并不会被该处理器捕获,而当使用executor.execute提交任务时则会被捕获。代码如下:

        final UncaughtExceptionHandler handler = new UncaughtExceptionHandler() {
@Override
public void uncaughtException(final Thread t, final Throwable e) {
System.out.println("uncaught exception");
}
}; ThreadFactory exFactory = new ThreadFactory() {
@Override
public Thread newThread(final Runnable r) {
Thread x = new Thread(r);
x.setUncaughtExceptionHandler(handler);
return x;
}
}; ExecutorService es = Executors.newSingleThreadExecutor(exFactory);
     // es.execute(new Runnable() {
es.submit(new Runnable() {
@Override
public void run() {
ArrayList<Integer> x = new ArrayList<Integer>();
System.out.println(x.get(10)); // index out of bound
}
});

如果要获得submit任务的异常需要使用其返回的future对象,执行器get方法如下:

        ExecutorService es = Executors.newSingleThreadExecutor(exFactory);
Future<Void> f = (Future<Void>) es.submit(new Runnable() {
@Override
public void run() {
ArrayList<Integer> x = new ArrayList<Integer>();
System.out.println(x.get(10));
}
}); try {
f.get();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

此时程序会打印错误信息。

Java 并发:Executor的更多相关文章

  1. JAVA并发-Executor

    结构 类继承图: 上面的各个接口/类的关系和作用: Executor 执行器接口,也是最顶层的抽象核心接口, 分离了任务和任务的执行. ExecutorService 在Executor的基础上提供了 ...

  2. java并发编程-Executor框架

    Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...

  3. &lbrack;转&rsqb;Java并发的四种风味:Thread、Executor、ForkJoin和Actor

    这篇文章讨论了Java应用中并行处理的多种方法.从自己管理Java线程,到各种更好几的解决方法,Executor服务.ForkJoin 框架以及计算中的Actor模型. Java并发编程的4种风格:T ...

  4. Java 并发编程&mdash&semi;&mdash&semi;Executor框架和线程池原理

    Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务 ...

  5. 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架&mdash&semi;Executor框架小结

    <Java并发编程实战>和<Java并发编程的艺术>           Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...

  6. (转)java并发编程--Executor框架

    本文转自https://www.cnblogs.com/MOBIN/p/5436482.html java并发编程--Executor框架 只要用到线程,就可以使用executor.,在开发中如果需要 ...

  7. java并发编程 Executor&comma;Executors&comma;ExecutorService&comma;CompletionService&comma;Future&comma;C

    使用CompletionService获取多线程返回值 CompletionService和ExecutorCompletionService详解 Java并发编程系列之十五:Executor框架

  8. Java 并发编程——Executor框架和线程池原理

    Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...

  9. 【Java 并发】Executor框架机制与线程池配置使用

    [Java 并发]Executor框架机制与线程池配置使用 一,Executor框架Executor框架便是Java 5中引入的,其内部使用了线程池机制,在java.util.cocurrent 包下 ...

  10. Java并发学习 &amp&semi; Executor学习 &amp&semi; 异常逃逸 &amp&semi; 同步互斥Best Practice &amp&semi; wait&sol;notify&comma; conditon&num;await&sol;signal

    看了这篇文章:http://www.ciaoshen.com/2016/10/28/tij4-21/ 有一些Java并发的内容,另外查了一些资料. 朴素的Thread 首先,Java中关于线程Thre ...

随机推荐

  1. 【JUC】JDK1&period;8源码分析之Semaphore(六)

    一.前言 分析了CountDownLatch源码后,下面接着分析Semaphore的源码.Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证 ...

  2. 汽车驱动之家 http&colon;&sol;&sol;bmw360&period;cn

    汽车驱动之家 http://bmw360.cn

  3. Maven exclusion

    <dependency><exclusions> <exclusion> <groupId>xx</group> <artifactI ...

  4. css margin-top设置html元素之间的距离

    css margin-top属性设置的是一个元素的顶端与另一个元素之间的距离.这个距离称为上外边距,本文章向大家介绍css margin-top属性的用法和实例,需要的朋友可以参考一下. css ma ...

  5. Eclipse常用插件推荐

    Eclipse Web Tools Platform(WTP) 地址:http://download.eclipse.org/webtools/ WTP十分强大,支持HTML, JavaScript, ...

  6. linux0&period;12 链接过程

    终于编译OK了..可链接就是一大堆错误 问题1: boot/head.o: In function `startup_32': (.text+0x10): undefined reference to ...

  7. &lbrack;MVC4-基礎&rsqb; 使用DataAnnotations&plus;jQuery進行表單驗證

    我目前有以下表單,Select部分因為必須上一層有選擇下層才有資料,因此使用jQuery驗證問題類型是否有選擇就好,而問題描述要驗證是否為空,這裡採用MVC內建的DataAnnotations來驗證. ...

  8. 201621123060《JAVA程序设计》第八周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: publ ...

  9. 『TensorFlow』读书笔记&lowbar;Inception&lowbar;V3&lowbar;下

    极为庞大的网络结构,不过下一节的ResNet也不小 线性的组成,结构大体如下: 常规卷积部分->Inception模块组1->Inception模块组2->Inception模块组3 ...

  10. 解决RDP连接不上

    1,开始->运行 regedit 删除注册表项目:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft, 删除MSLicensing.2,开始--运行 mstsc /v:( ...