java CompletableFuture初探 (并发小实验)
来源:互联网 发布:titan5知乎专栏 编辑:程序博客网 时间:2024/06/05 02:12
随着java8的到来,一大批好用的操作也来到我们的身边。
我们今天先来小尝一下CompletableFuture
这个类是Future的实现类,同时实现了一大堆别的接口。
粗粗一数,大概有50多个方法,深入的东西小伙伴们自己去研究吧,我带大家先来一发初体验。
package playground;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ForkJoinPool;/** * Created by tarner on 17/9/15. */public class Play { public static void main(String[] args) throws Exception { long currentTimeMillis = System.currentTimeMillis(); CompletableFuture<Integer> f1 = CompletableFuture.supplyAsync(() -> fun1()); CompletableFuture.runAsync(new A(f1)); CompletableFuture<Integer> f2 = CompletableFuture.supplyAsync(() -> fun2()); CompletableFuture.runAsync(new A(f2)); ForkJoinPool forkJoinPool = ForkJoinPool.commonPool(); while (!forkJoinPool.isQuiescent()) { } System.out.println("耗时" + (System.currentTimeMillis() - currentTimeMillis)); } private static int fun1() { System.out.println("fun1 bejin"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("fun1 end"); return 1; } private static int fun2() { System.out.println("fun2 bejin"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("fun2 end"); return 2; }}
package playground;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;/** * Created by tarner on 17/9/15. */public class A implements Runnable { private CompletableFuture f; public A(CompletableFuture f) { this.f = f; } @Override public void run() { try { System.out.println(f.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}
结果
fun1 bejin
fun2 bejin
fun1 end
fun2 end
2
1
耗时2194
解读
A类实现了Runable接口,其中之有一个操作,就是调用CompletableFuture的get方法。
主函数中fun1方法,fun2方法都是人为制造的需要sleep2秒的方法,我们在这里模拟那些需要花时间才能知道结果的方法。
CompletableFuture<Integer> f1 = CompletableFuture.supplyAsync(() -> fun1()); CompletableFuture.runAsync(new A(f1)); CompletableFuture<Integer> f2 = CompletableFuture.supplyAsync(() -> fun2()); CompletableFuture.runAsync(new A(f2));
重点来了
supplyAsync接受一个有返回结果的function(fun1)
runAsync接受一个实现Runable的对象(A)。
我们A的构造方法需要一个CompletableFuture(f1)
我们可以看到整个方法走下来用了2194毫秒
fun1(),fun2()都是需要2000毫秒的
如果是同步方式,一定要4000毫秒+才能执行完。
CompletableFuture帮助我们更好的写并发程序,提高并发量。
阅读全文
0 0
- java CompletableFuture初探 (并发小实验)
- Java CompletableFuture
- java8新特性(九):CompletableFuture多线程并发异步编程
- CompletableFuture 的并发性能研究
- Java CompletableFuture 详解
- Java CompletableFuture 详解
- Java里面CompletableFuture详解
- 疯狂Java学习(86)-----------使用CompletableFuture处理异步超时
- Java学习(86)-----------使用CompletableFuture处理异步超时
- CompletableFuture(一)
- CompletableFuture(二)
- CompletableFuture(三)
- CompletableFuture
- CompletableFuture
- CompletableFuture
- CompletableFuture
- Java 高效并发编程初探
- Java 8:CompletableFuture终极指南
- 餐巾计划问题
- C语言实现顺序表
- Live555学习之(六)---------- 在Live555中实现录像
- SylixOS 基于ZYNQ的时钟频率修改详解
- 接口
- java CompletableFuture初探 (并发小实验)
- Java和Jsp 中 request.getHeader() 详细说明
- Live555学习之(七)---------- Live555实现h264视频的点播
- OutOfMemoryError系列(3): Permgen space
- 剑指offer 15 链表中倒数第k个结点
- eclipse创建android项目
- 170915_算法导论学习(三)_2.3 设计算法
- 如何编写 Runkeeper 一样的 app(2)
- VS2010 MFC对话框程序如何在windows桌面用GDI绘图,并用裁剪区限制绘图区