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. R语言基于线性回归(Linear Regression)进行特征筛选(feature selection)
  2. JDK5.0中JVM堆模型、GC垃圾收集详细解析 .
  3. 恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏
  4. mysql 排除另一表_MYSQL 两表 排除 重复记录
  5. Apache JMeter 记一次使用HTTP工具POST提交JSON数据进行送积分高并发压测(二)
  6. pip安装cinrad
  7. ubuntu更改mysql编码格式_Ubuntu修改mysql编码格式
  8. 动画演示 Delphi 2007 IDE 功能[6] - 快速查看 Delphi 所有的核心数据类型
  9. ppt转pdf使用哪种pdf虚拟打印机
  10. postman下载excel出现乱码
  11. rk3288 android4.4,RK3288 Android4.4使用A6212,wifi可以用但是蓝牙起不来
  12. 年轻人先实现社会价值,再去实现人生价值
  13. 夜神模拟器卡在android,夜神安卓模拟器很卡怎么办?模拟器卡顿解决方法分享...
  14. 安装配置ELK、安装配置ElasticSearch7.13、安装配置Kibana7.13、安装配置Logstash7.13、ElasticSearch7.13安装中文分词器
  15. 一年级上册计算机教学计划,人教版数学一年级上册教学计划
  16. 老徐FrankXuLei 受邀为中国东方航空上海研发中心讲授微软.NET企业开发课程
  17. 最in [IN词] 分享
  18. 【报错解决】为Blender构建Python模块
  19. 蓝牙 - 技术演变史
  20. Android图片编解码实现方案(Skia)

热门文章

  1. 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...
  2. 【转】关于eclipse和javac编译结果不一致的问题的分析与解决
  3. 连接oracle数据库,新建用户登录界面
  4. ADS_LPC2103开发板SPI 4位数码管测试试验
  5. hdu1556(Color the ball )
  6. tomcat启动时,报java.io.EOFException
  7. 20165305 苏振龙 《Java 程序设计》第一次测试总结
  8. [转]计算机专业方面的期刊介绍
  9. mycat1.5~1.6的一个bug
  10. jquery ajax请求 清除缓存