Java中使用Future获取线程异步执行结果的使用
来源:互联网 发布:网络与新媒体是干嘛的 编辑:程序博客网 时间:2024/06/02 03:51
package demo.feture;import java.util.concurrent.*;/** * created by yuyufeng on 2017/8/17. */public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { long begin = System.currentTimeMillis(); ExecutorService executorService = Executors.newFixedThreadPool(10); Future future = executorService.submit(new Callable() { public Object call() throws Exception { System.out.println("Asynchronous Callable1"); //异步开始执行任务(需要2秒) Thread.sleep(2000); return "Callable Result1"; } }); Future future2 = executorService.submit(new Callable() { public Object call() throws Exception { //异步开始执行任务(需要2秒) System.out.println("Asynchronous Callable2"); Thread.sleep(3000); return "Callable Result2"; } }); //主线程执行任务2.5秒(操作1) Thread.sleep(1000); //此时任务1 已经完成,获取结果(如果未完成,则future.get()会阻塞等待结果) System.out.println("future.get() = " + future.get()); //主线程执行任务3 秒(操作2) Thread.sleep(3000); System.out.println("future.get() = " + future.get()); System.out.println("future.get() = " + future2.get()); executorService.shutdown(); System.out.println(System.currentTimeMillis() - begin); //操作1 主线程执行任务2.5秒, 累计耗时 5506毫秒,约等于主线程总耗时。 //操作1 主线程执行任务1秒, 累计耗时 5006毫秒,主线程在操作1之后,又等了1秒去获取第一次异步执行的结果,所以就是主线程的操作时间+1秒与约等于5秒。 //future.get()的作用就是去获取异步执行的结果,如果异步执行完毕则不会阻塞 }}
Feture获取异步执行结果方法在请求超时放弃时的使用:
package demo.feture;import java.util.concurrent.*;/** * created by yuyufeng on 2017/8/17. */public class TestTimeOut { public static void main(String[] args) throws ExecutionException, InterruptedException { long begin = System.currentTimeMillis(); ExecutorService executorService = Executors.newFixedThreadPool(10); Future future = executorService.submit(new Callable() { public Object call() throws Exception { System.out.println("Asynchronous Callable1"); //异步开始执行任务(需要2秒) Thread.sleep(5000); System.out.println("执行完毕~"); return "Callable Result1"; } }); try { //获取异步执行结果,如果过3秒,则直接结束! Object result = future.get(3000, TimeUnit.MILLISECONDS); System.out.println("future.get() = " + result); } catch (TimeoutException e) { System.out.println("你太慢了,不想要结果,直接结束吧~" + e.getLocalizedMessage()); } executorService.shutdown(); System.out.println(System.currentTimeMillis() - begin); }}/** *执行结果 * Asynchronous Callable1 *你太慢了,不想要结果,直接结束吧~null *3005 *执行完毕~ */
阅读全文
1 0
- Java中使用Future获取线程异步执行结果的使用
- java 使用Callable和Future返回线程执行的结果
- 多线程 : 使用 Future 获取线程返回结果
- java多线程Future、FutureTask使用示例,返回异步的结果
- java多线程Future、FutureTask使用示例,返回异步的结果
- 如何在java中获取线程异步执行之后的结果
- 使用Callable和Future两个类,来获得线程执行后的结果
- java异步计算Future的使用
- java异步计算Future的使用
- java异步计算Future的使用
- java异步计算Future的使用
- java异步计算Future的使用
- java异步计算Future的使用
- java线程中Callble和Future的使用
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- java异步计算-Future使用
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- 九度OJ:1054
- Java基础(一)Java概述相关
- POJ 2446 Chessboard(二分图最大匹配)
- sigaction()之sa_mask
- 深入理解计算机操作系统(2.3.3)
- Java中使用Future获取线程异步执行结果的使用
- Android动画知识汇总(初 xml篇)
- Hdu 6133 启发式合并
- Corejava day04
- Redis操作及持久化分析
- angularJs 中的ui-bootstrap 插件$uibModal 问题总结
- vue组件之间的通信
- Android开发 之 Path常用方法
- CSS 幽灵元素方案垂直居中注意事项