如何在java中获取线程异步执行之后的结果
来源:互联网 发布:淘宝买家封号怎么解封 编辑:程序博客网 时间:2024/05/21 14:00
java中提供了Future<V>接口和实现了Future接口的FutureTask<V> 类来将线程执行之后的结果返回(通过get()方法)。
1.Future<V>接口
Runnable接口执行任务是不返回任何值的,Runnable的run()方法的执行结果是void,而Future接口的call方法是有返回结果的,这是Runnable跟Future的区别之一,它们的另一个不同之处就是实现了Runnable接口的任务执行是调用ExecutorService的execute(Runnable task)方法,而实现了Future接口的任务是调用ExecutorService的submit(Future task)方法。调用Future的get()方法就能直接得到任务的返回值,该方法会一直阻塞直到任务的结果出来为止,我们可以调用Future的isDone()方法来判断该任务的结果是否准备就绪。
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 TestFuture {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService executor = Executors.newCachedThreadPool();Futureresult1 = executor.submit(new Callable () {@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 0; i < 10; i++) {sum += i;}return sum;}});Future result2 = executor.submit(new Callable () {@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 10; i < 100; i++) {sum += i;}return sum;}});executor.shutdown();System.out.println(result1.get() + result2.get());}}
2.FutureTask类
FutureTask实现了Future接口,将一个Callable实例作为参数传给它,就能创建一个FutureTask实例,然后用ExecutorService的submit方法来执行这个实例。最后同样是用get方法获取线程执行后的结果。
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.FutureTask;public class TestFutureTask {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService executor = Executors.newCachedThreadPool();Callabletask = new Callable () {@Overridepublic String call() throws Exception {return "结果";}};FutureTask ft = new FutureTask (task);executor.submit(ft);System.out.println(ft.get());executor.shutdown();}}empty
阅读全文
2 0
- 如何在java中获取线程异步执行之后的结果
- Java中使用Future获取线程异步执行结果的使用
- 如何得到线程执行完之后返回的结果
- 如何在java code 中获取 dbms_output 的结果
- Java回调以及如何利用回调来获取线程的执行结果
- 获取线程执行结果
- 转载:C程序中如何获取命令执行的结果
- 在shell中获取sql的执行结果
- 【多线程】——Runnable如何获取线程执行结果?
- 如何使主线程在子线程之后执行
- JDK5 如何获取所有线程池的结果再继续执行
- 在.net中悄悄执行dos命令,并获取执行的结果
- 在.net中悄悄执行dos命令,并获取执行的结果
- 在.net中悄悄执行dos命令,并获取执行的结果
- 在.net中悄悄执行dos命令,并获取执行的结果
- java线程创建方法只有两个?NO! 异步计算的结果如何拿到?
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- 最长连续序列
- Python3学习笔记2-if,for,while
- 数组进阶找出最大或最小值
- RMI远程方法调用
- numpy指南
- 如何在java中获取线程异步执行之后的结果
- Linux知识
- python爬虫(四)破解网站限制,想抓什么 由你做主
- Android Service完全解析,关于服务你所需知道的一切(上)
- Hive安装—远端MySQL模式
- 极简の机器学习介绍
- JAVA Swing中的键盘事件实例
- 郑州-大连:无限延期
- Android Service完全解析,关于服务你所需知道的一切(下)