java – ExecutorService与CompletableFuture
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – ExecutorService与CompletableFuture,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2065字,纯文字阅读大概需要3分钟。
内容图文
![java – ExecutorService与CompletableFuture](/upload/InfoBanner/zyjiaocheng/789/995c04b3720049479a1ad1c0ee6b3641.jpg)
我一直在尝试实现一个异步过程,其中父方法调用一个子方法,然后调用三个不同的方法.
我希望所有这个过程都是异步完成的,即在子方法中的这三个调用并行完成之后,控件应该返回到父方法并继续执行其余的操作.
我有这个代码,测试时工作正常.
public ReturnSomething parent(){
child();
...//rest to UI
}
private void child(){
ExecutorService executorService = Executors.newFixedThreadPool(3);
Runnable service1 = () -> {
MyFileService.service1();
};
Runnable service2 = () -> {
MyFileService.service2();
};
Runnable service3 = () -> {
MyFileService.service3();
};
executorService.submit(service1);
executorService.submit(service2);
executorService.submit(service3);
}
现在,我的主要是要求我使用它.
public ReturnSomething parent(){
child();
...//rest to UI
}
private void child(){
CompletableFuture.supplyAsync(() -> MyFileService.service1();
CompletableFuture.supplyAsync(() -> MyFileService.service2();
CompletableFuture.supplyAsync(() -> MyFileService.service3();
}
我知道CompletableFuture是Java 8中的新功能,但第二代码如何比第一代更好?
因为,对于ExecutorService,我没有调用“get()”方法,所以我不会等待aysnc响应.那么,有人可以解释一下有什么区别吗?
解决方法:
从功能上讲,这两种方法或多或少相同:
>您提交执行任务;
>你不等待结果.
但从技术上讲,存在一些微妙的差异:
>在第二种方法中,您没有指定执行程序,因此它将使用常见的ForkJoinPool.如果你不想要的话,你必须传递一个执行器作为supplyAsync()的第二个参数;
> CompletableFuture API允许使用thenApply(),thenCompose()等轻松链接更多调用.因此,它比ExecutorService.submit()返回的简单Future更灵活;
>使用CompletableFuture可以使用返回CompletableFuture.allOf(先前创建的期货)轻松地从child()方法返回未来.
关于可读性,这是一个偏好问题,但是如果你想要等效代码,一旦你对其进行类似的格式化,可以认为CompletableFuture方法的可读性稍差.相比:
executorService.submit(MyFileService::service1);
executorService.submit(MyFileService::service2);
executorService.submit(MyFileService::service3);
同
CompletableFuture.supplyAsync(MyFileService::service1, executorService);
CompletableFuture.supplyAsync(MyFileService::service2, executorService);
CompletableFuture.supplyAsync(MyFileService::service3, executorService);
内容总结
以上是互联网集市为您收集整理的java – ExecutorService与CompletableFuture全部内容,希望文章能够帮你解决java – ExecutorService与CompletableFuture所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。