当前位置: 首页 > news >正文

网站开发 职位晋升路线阿里建站系统

网站开发 职位晋升路线,阿里建站系统,房地产型网站建设报价,丽水微信网站建设报价CompletableFuture是Java 8中引入的一个异步编程工具#xff0c;它实现了Future和CompletionStage接口#xff0c;可以用于处理异步任务。CompletableFuture提供了丰富的方法#xff0c;可以方便地组合多个异步任务#xff0c;实现复杂的异步逻辑。本文将介绍CompletableFu…CompletableFuture是Java 8中引入的一个异步编程工具它实现了Future和CompletionStage接口可以用于处理异步任务。CompletableFuture提供了丰富的方法可以方便地组合多个异步任务实现复杂的异步逻辑。本文将介绍CompletableFuture的使用。 ​ 1. 创建CompletableFuture 要创建一个CompletableFuture可以使用以下静态方法 supplyAsync(SupplierU supplier): 使用一个供应者函数Supplier创建一个异步任务。 runAsync(Runnable runnable): 使用一个Runnable对象创建一个异步任务。 completedFuture(U value): 创建一个已经完成的CompletableFuture。 exceptionally(FunctionThrowable, ? extends T fn): 当异步任务发生异常时使用一个异常函数处理异常。 2. 组合多个异步任务 CompletableFuture提供了很多方法可以方便地组合多个异步任务。以下是一些常用的组合方法 thenApply(Function? super T,? extends U fn): 对异步任务的结果应用一个函数并返回一个新的CompletableFuture。 thenAccept(Consumer? super T action): 对异步任务的结果执行一个操作并返回一个新的CompletableFuture。 thenCombine(CompletionStage? extends U other, BiFunction? super T,? super U,? extends V fn): 当两个异步任务都完成时使用一个函数组合它们的结果并返回一个新的CompletableFuture。 thenCompose(Function? super T, ? extends CompletionStageU fn): 当异步任务完成时将其结果应用于另一个异步任务并返回一个新的CompletableFuture。 allOf(CompletableFuture?... cfs): 等待所有给定的CompletableFuture都完成然后返回一个新的CompletableFuture。 anyOf(CompletableFuture?... cfs): 只要给定的任意一个CompletableFuture完成就返回一个新的CompletableFuture。 3. 获取异步任务的结果 可以使用以下方法获取异步任务的结果 get(): 阻塞当前线程等待异步任务完成并返回结果。注意这个方法会抛出InterruptedException和ExecutionException异常需注意异常处理。 get(long timeout, TimeUnit unit): 与get()方法一样区别是增加了等待异步任务完成的超时时间并且会抛出TimeoutException异常。 join(): 阻塞当前线程等待异步任务完成并返回结果。与get()方法类似但不会抛出异常。 isDone(): 判断异步任务是否已完成。如果已完成返回true否则返回false。 isCompletedExceptionally(): 判断异步任务是否因异常而完成。如果因异常而完成返回true否则返回false。 exceptionally(FunctionThrowable, ? extends T fn): 当异步任务发生异常时使用一个异常函数处理异常并返回一个新的CompletableFuture。 4. 示例代码 下面是一个简单的示例演示了如何使用CompletableFuture组合多个异步任务 import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException;public class CompletableFutureDemo {private static final Logger LOGGER LoggerFactory.getLogger(CompletableFutureDemo.class);public static void main(String[] args) throws Exception {CompletableFutureString future1 CompletableFuture.supplyAsync(() - {sleep(1000);return Hello;});future1.thenApply(s - s World).thenAccept(message - LOGGER.info(message));CompletableFutureString future2 CompletableFuture.supplyAsync(() - {sleep(1000);return Hello Timeout;});CompletableFutureObject future3 CompletableFuture.supplyAsync(() - {sleep(50);throw new RuntimeException();}).exceptionally(ex - {// 处理异常并返回默认值或执行其他操作LOGGER.info(future3 ex.getMessage());return 默认值;});LOGGER.info(主线程继续执行);try {// 模拟获取结果超时String result2 future2.get(500, TimeUnit.MILLISECONDS);LOGGER.info(result2);} catch (TimeoutException e) {LOGGER.info(future2超时);}// future3使用了exceptionally()future3.isCompletedExceptionally()不会为trueString result3 (String) future3.get();LOGGER.info(result3 future3.isCompletedExceptionally());CompletableFuture.allOf(future1, future2, future3).join(); // 等待所有任务完成LOGGER.info(主线程结束);}private static void sleep(long millis) {try {TimeUnit.MILLISECONDS.sleep(millis);} catch (InterruptedException e) {throw new IllegalStateException(e);}} } 程序输出如下 18:43:50.408 [main] INFO CompletableFutureDemo - 主线程继续执行 18:43:50.460 [ForkJoinPool.commonPool-worker-3] INFO CompletableFutureDemo - future3java.lang.RuntimeException 18:43:50.916 [main] INFO CompletableFutureDemo - future2超时 18:43:50.916 [main] INFO CompletableFutureDemo - 默认值 false 18:43:51.404 [ForkJoinPool.commonPool-worker-1] INFO CompletableFutureDemo - Hello World 18:43:51.404 [main] INFO CompletableFutureDemo - 主线程结束 从上述输出可以看出多个CompletableFuture与主线程并行执行并且不会相互影响。这意味着每个CompletableFuture都可以独立地执行其任务而不需要等待其他任务完成。此外由于CompletableFuture是异步的它们不会阻塞主线程的执行这种并行执行的方式可以提高应用的性能和效率。 总结 CompletableFuture是一个强大的异步编程工具可以方便地组合多个异步任务实现复杂的异步逻辑。通过使用CompletableFuture我们可以实现高效的并发编程并充分利用多核处理器的能力。
http://www.zqtcl.cn/news/614755/

相关文章:

  • 娄底网站seo建平台网站费用
  • seo优化网站的注意事项WordPress伪静态公告404
  • 手机网站自动适应沈阳网站建设公司电话
  • 备案号网站下边苏州广告公司招聘
  • 企业网站设计模板js做网站
  • 福州最好的网站建设公司网络策划
  • 威宁做网站西部数码网站管理助手 没有d盘
  • 网站设计基础知识重庆seo博客推广
  • 中小企业商务网站建设wordpress dmeng
  • 关于网站建设总结公司网站购买主机
  • 定制网站与模板网站网页美工设计师工资
  • 丹棱县 网站建设wordpress公司主题破解版
  • 贾汪微网站开发百度推广登录账号首页
  • 网站开发和网站运营的区别嘉兴市秀洲区住房和建设局网站
  • 西安网站开发公司哪家强如何做付费阅读网站
  • ios认证 东莞网站建设天津企业网站建设方案
  • 高网站排名吗wordpress 拼音别名
  • 网站出现的问题杭州旅游网站建设
  • 陕西城乡建设部网站怎么用自己注册的域名做网站
  • 企业邮箱注册价格汕头做网站优化的公司
  • 高校工会网站建设网站静态页面生成
  • 辽宁省营商环境建设局 网站做网站前端后端ui什么意思
  • 合作社网站模板贵州安顺建设主管部门网站
  • 网站不备案能访问吗哪家做企业网站
  • 做网站写的代号好跟不好的区别企信网企业信用信息系统
  • 网站需要服务器吗手机网站解决方案
  • 网站子网页怎么做国外网站 模板
  • 手机评测网站标志设计分析
  • 网页游戏网站建设成都公司网站
  • 网站流量统计分析的误区wordpress二级目录安装