CompletableFuture线程串行化方法
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线程串行化方法相关推荐
- 可串行化 冲突可串行化 判断方法
这篇博文参考了中国大学mooc:战老师. 点击下方链接,进入B站观看视频,[视频编号P234附近]有相关知识点 事务调度的解释https://www.bilibili.com/video/BV1PJ4 ...
- 打造千万级流量秒杀第十六课 漏斗模型:如何将并发流量过滤和串行化?
在前几讲中,我提到了秒杀单机并发能力需要达到 10 万 QPS 以上.你有没有想过:这 10 万请求是否都需要读写 Redis ?秒杀系统又是如何判断哪些请求应该读写 Redis? 我之所以提这个问题 ...
- 在asp.net2.0中使用串行化对象实现自定义配置
在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...
- MySQL事务的可串行化
可串行化--SERIALIZABLE 事务的最高级别,在每个读的数据行上,加上锁,使之不可能相互冲突,因此,会导致大量的超时现象 设置b账户,事务的隔离级别 B账户,首先,将b账户的隔离级别设置为SE ...
- MFC六大核心机制之四:永久保存(串行化)
永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...
- 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID.隔离级别.MVCC.锁,由于太长,只好拆分成上下两篇: 上:并发问题与隔离级别 主要讲事务所要解决的问题.思路,先理解 ...
- 聊聊缓存机制:双写兜兜转转,又回到了串行化
来源 | moon聊技术 责编 | 寇雪芹 头图 | 下载于ICphoto 什么是双写?这个很好理解,双写就是说,一份数据在数据库存一份,在缓存中也存一份,给缓存一个过期时间,当读不到缓存时从数据库读 ...
- 利用XMLSerializer将对象串行化到XML
微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空间System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能,为用户自 ...
- 序列化(串行化)- 使用BinaryFormatter进行序列化
注:原书上翻译为串行化,MSDN翻译为序列化,我以MSDN为准,写为序列化. 可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerial ...
最新文章
- 云服务器能否申请多个IP?
- django 完整日志配置
- 正则化方法:防止过拟合,提高泛化能力
- Codeforces 1025G Company Acquisitions (概率期望)
- DataSet转化为DataTable
- android jni打印log信息
- Nacos源码发送心跳
- 程序员能力提升:你应该知道的那些编程原则!!
- CSS知识点整理(2):框模型,定位
- priority_queue(优先队列)的简单构造与用法
- python读取usb扫码枪数据_vue扫码枪input接收数据
- shell 学习之for语句
- JAVA计算机毕业设计随心淘网管理系统源码+系统+mysql数据库+lw文档
- Arduino+SIM900A+继电器
- 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
- 如何旋转PDF页面并保存
- 【航线运输驾驶员理论考试】飞行原理
- 坦克大战java_Java课程设计——坦克大战
- jqgrid 列排序
- 实习僧网站字体反爬破解思路及步骤分享