获取线程执行结果
来源:互联网 发布:mac虚拟机安装linux 编辑:程序博客网 时间:2024/05/22 14:18
如果线程执行过程中抛出异常,在获取结果时会hang在出错线程上,而其他线程的结果不会被获取。
package com.test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ExecutorExceptionTest {
static class Result { private String name; private String value; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Result(String name, String value) { this.name = name; this.value = value; } @Override public String toString() { return "Result [name=" + name + ", value=" + value + "]"; }}static class Task implements Callable<Result> { private String name; private int value; public Task(String name, int value) { this.name = name; this.value = value; } @Override public Result call() throws Exception { System.out.println(name + " begin*********************"); if (value % 2 == 1) throw new Exception(name + "the task failed!"); System.out.println(name + " end-------------------------"); return new Result(name, "number value is " + value); }}public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executor = Executors.newFixedThreadPool(5); List<Task> tasks = new ArrayList<Task>(); for (int i = 0; i < 5; i++) { Task task = new Task("task" + i, i); tasks.add(task); } List<Future<Result>> results = executor.invokeAll(tasks); for (int i = 0; i < results.size(); i++) { Future<Result> result = results.get(i); Result resultValue = result.get(); System.out.println(resultValue); }}
}
consle log
task0 begin*********************
task1 begin*********************
task0 end————————-
task2 begin*********************
task2 end————————-
task3 begin*********************
task4 begin*********************
task4 end————————-
Result [name=task0, value=number value is 0]
Exception in thread “main” java.util.concurrent.ExecutionException: java.lang.Exception: task1the task failed!
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at com.test.ExecutorExceptionTest.main(ExecutorExceptionTest.java:80)
Caused by: java.lang.Exception: task1the task failed!
at com.test.ExecutorExceptionTest
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
- 获取线程执行结果
- 【多线程】——Runnable如何获取线程执行结果?
- 获取SYSTEM()执行结果
- 线程池利用FutureTask执行Callable子类,获取执行结果的例子
- Callable拿到线程执行结果
- 获取动态SQL执行结果
- linux 执行命令行,获取结果
- 获取动态sql执行结果
- JDK5 如何获取所有线程池的结果再继续执行
- Java回调以及如何利用回调来获取线程的执行结果
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java并发编程(八)——批量获取多条线程的执行结果
- 如何在java中获取线程异步执行之后的结果
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java中使用Future获取线程异步执行结果的使用
- Java执行linux命令 获取执行结果
- c++ 执行命令行获取执行结果
- JDK5 获取线程返回结果
- NodeJs的简介及安装
- Linux基础学习笔记(Linux软件安装管理)
- fio使用指南
- java基本类型数组初始化
- LOL设计师:未来将有官方短篇故事 !
- 获取线程执行结果
- 163.Unique Binary Search Trees-不同的二叉查找树(中等题)
- 常用GCD
- 老毛桃win8pe制作工具u盘初始化教程
- P2P、P2C、O2O、B2C、B2B、C2C 的各个模式的区别
- redis的API对String、object、List、Map、Hash常用操作
- Google 的开源技术protobuf 简介与例子
- 关闭包含Iframe的弹出框
- phpMailer发送邮件