thenApply 方法:当一个线程依赖另一个线程时,获取上一个任务返回的结果,并返回当前任务的返回值。

thenAccept方法:消费处理结果。接收任务的处理结果,并消费处理,无返回结果。

thenRun方法:只要上面的任务执行完成,就开始执行thenRun,只是处理完任务后,执行 thenRun的后续操作

带有Async默认是异步执行的。这里所谓的异步指的是不在当前线程内执行。

public <U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn)
public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn, Executor executor)public CompletionStage<Void> thenAccept(Consumer<? super T> action);
public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action);
public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action,Executor executor);public CompletionStage<Void> thenRun(Runnable action);
public CompletionStage<Void> thenRunAsync(Runnable action);
public CompletionStage<Void> thenRunAsync(Runnable action,Executor executor);

Function<? super T,? extends U> T:上一个任务返回结果的类型 U:当前任务的返回值类型

代码演示:

public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> future = CompletableFuture.supplyAsync(new Supplier<Integer>() {@Overridepublic Integer get() {System.out.println(Thread.currentThread().getName() + "\t completableFuture");//int i = 10 / 0;return 1024;}}).thenApply(new Function<Integer, Integer>() {@Overridepublic Integer apply(Integer o) {System.out.println("thenApply方法,上次返回结果:" + o);return  o * 2;}}).whenComplete(new BiConsumer<Integer, Throwable>() {@Overridepublic void accept(Integer o, Throwable throwable) {System.out.println("-------o=" + o);System.out.println("-------throwable=" + throwable);}}).exceptionally(new Function<Throwable, Integer>() {@Overridepublic Integer apply(Throwable throwable) {System.out.println("throwable=" + throwable);return 6666;}});System.out.println(future.get());
}

CompletableFuture线程串行化方法相关推荐

  1. 可串行化 冲突可串行化 判断方法

    这篇博文参考了中国大学mooc:战老师. 点击下方链接,进入B站观看视频,[视频编号P234附近]有相关知识点 事务调度的解释https://www.bilibili.com/video/BV1PJ4 ...

  2. 打造千万级流量秒杀第十六课 漏斗模型:如何将并发流量过滤和串行化?

    在前几讲中,我提到了秒杀单机并发能力需要达到 10 万 QPS 以上.你有没有想过:这 10 万请求是否都需要读写 Redis ?秒杀系统又是如何判断哪些请求应该读写 Redis? 我之所以提这个问题 ...

  3. 在asp.net2.0中使用串行化对象实现自定义配置

    在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...

  4. MySQL事务的可串行化

    可串行化--SERIALIZABLE 事务的最高级别,在每个读的数据行上,加上锁,使之不可能相互冲突,因此,会导致大量的超时现象 设置b账户,事务的隔离级别 B账户,首先,将b账户的隔离级别设置为SE ...

  5. MFC六大核心机制之四:永久保存(串行化)

    永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...

  6. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...

    最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID.隔离级别.MVCC.锁,由于太长,只好拆分成上下两篇: 上:并发问题与隔离级别 主要讲事务所要解决的问题.思路,先理解 ...

  7. 聊聊缓存机制:双写兜兜转转,又回到了串行化

    来源 | moon聊技术 责编 | 寇雪芹 头图 | 下载于ICphoto 什么是双写?这个很好理解,双写就是说,一份数据在数据库存一份,在缓存中也存一份,给缓存一个过期时间,当读不到缓存时从数据库读 ...

  8. 利用XMLSerializer将对象串行化到XML

    微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空间System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能,为用户自 ...

  9. 序列化(串行化)- 使用BinaryFormatter进行序列化

    注:原书上翻译为串行化,MSDN翻译为序列化,我以MSDN为准,写为序列化. 可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerial ...

最新文章

  1. 云服务器能否申请多个IP?
  2. django 完整日志配置
  3. 正则化方法:防止过拟合,提高泛化能力
  4. Codeforces 1025G Company Acquisitions (概率期望)
  5. DataSet转化为DataTable
  6. android jni打印log信息
  7. Nacos源码发送心跳
  8. 程序员能力提升:你应该知道的那些编程原则!!
  9. CSS知识点整理(2):框模型,定位
  10. priority_queue(优先队列)的简单构造与用法
  11. python读取usb扫码枪数据_vue扫码枪input接收数据
  12. shell 学习之for语句
  13. JAVA计算机毕业设计随心淘网管理系统源码+系统+mysql数据库+lw文档
  14. Arduino+SIM900A+继电器
  15. 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
  16. 如何旋转PDF页面并保存
  17. 【航线运输驾驶员理论考试】飞行原理
  18. 坦克大战java_Java课程设计——坦克大战
  19. jqgrid 列排序
  20. 实习僧网站字体反爬破解思路及步骤分享

热门文章

  1. [转]Git分支管理策略
  2. shell日期处理函数
  3. uoj22 外星人(dp)
  4. 区分range() , np.arange() , np.linspace()
  5. 团队网站 ,资料陆续更新中。
  6. hoj 13788 Dwarves
  7. Erlang OTP学习(3) supervisor
  8. 考研编程练习----快速排序
  9. 【Hibernate】Hibernate中查询表名、字段名以及字段类型等信息
  10. UI2Code智能生成Flutter代码--整体设计篇