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

动态网站建设与管理课程设计报告百度云资源搜索入口

动态网站建设与管理课程设计报告,百度云资源搜索入口,电子商务网站建设需求分析,做瞹瞹嗳免费网站在线观看引言 CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,用于处理异步操作和处理结果。它实现了 Future 和 CompletionStage 接口,提供了丰富的方法来处理异步任务的完成、组合和异常处理。 CompletableFuture本质是对异步线程的返回值…

引言

CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,用于处理异步操作和处理结果。它实现了 Future 和 CompletionStage 接口,提供了丰富的方法来处理异步任务的完成、组合和异常处理。      

CompletableFuture本质是对异步线程的返回值的处理,所以要有线程池和对异步结果的处理

方法使用

使用 runAsync 执行无返回值的异步任务

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class CompletableFutureExample {public static void main(String[] args) {// 创建一个线程池ExecutorService executor = Executors.newSingleThreadExecutor();// 创建一个无返回值的异步任务CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {try {Thread.sleep(1000);System.out.println("异步任务执行完成");} catch (InterruptedException e) {e.printStackTrace();}}, executor);// 主线程继续执行其他任务System.out.println("主线程继续执行");// 等待异步任务完成future.join();// 关闭线程池executor.shutdown();}
}

使用 supplyAsync 执行有返回值的异步任务

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class CompletableFutureSupplyExample {public static void main(String[] args) {ExecutorService executor = Executors.newSingleThreadExecutor();// 创建一个有返回值的异步任务CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);return "异步任务的结果";} catch (InterruptedException e) {e.printStackTrace();return null;}}, executor);System.out.println("主线程继续执行");// 获取异步任务的结果String result = future.join();System.out.println("异步任务的结果是: " + result);executor.shutdown();}
}

和runAsync区别是join方法有没有返回结果

使用 thenApply 对结果进行转换

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThenApplyExample {public static void main(String[] args) {ExecutorService executor = Executors.newSingleThreadExecutor();CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);return 10;} catch (InterruptedException e) {e.printStackTrace();return 0;}}, executor).thenApply(result -> result * 2);Integer finalResult = future.join();System.out.println("最终结果是: " + finalResult);executor.shutdown();}
}

使用 thenAccept 消费结果

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThenAcceptExample {public static void main(String[] args) {ExecutorService executor = Executors.newSingleThreadExecutor();CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(1000);return 20;} catch (InterruptedException e) {e.printStackTrace();return 0;}}, executor).thenAccept(result -> System.out.println("消费结果: " + result));future.join();executor.shutdown();}
}

源码解读

 CompletableFuture 内部有一个 volatile 类型的 state 变量来表示任务的状态,常见的状态有:

  • NEW:初始状态,表示任务还未开始执行。
  • COMPLETING:正在完成状态,表示任务正在执行完成操作。
  • NORMAL:正常完成状态,表示任务正常执行并返回结果。
  • EXCEPTIONAL:异常完成状态,表示任务执行过程中抛出了异常。

runAsync

public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor) {return asyncRunStage(screenExecutor(executor), runnable);
}private static CompletableFuture<Void> asyncRunStage(Executor e, Runnable f) {if (f == null) throw new NullPointerException();CompletableFuture<Void> d = new CompletableFuture<Void>();e.execute(new AsyncRun(d, f));return d;
}

runAsync 方法接收一个 Runnable 任务和一个 Executor 线程池,它会创建一个新的 CompletableFuture 对象,并将任务封装成 AsyncRun 对象提交给线程池执行。

supplyAsync 方法源码

public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor) {return asyncSupplyStage(screenExecutor(executor), supplier);
}private static <U> CompletableFuture<U> asyncSupplyStage(Executor e, Supplier<U> f) {if (f == null) throw new NullPointerException();CompletableFuture<U> d = new CompletableFuture<U>();e.execute(new AsyncSupply<U>(d, f));return d;
}

supplyAsync 方法与 runAsync 类似,只不过它接收的是一个 Supplier 任务,该任务有返回值。它会创建一个新的 CompletableFuture 对象,并将任务封装成 AsyncSupply 对象提交给线程池执行。

thenApply 方法源码

public <U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn) {return uniApplyStage(null, fn);
}private <V> CompletableFuture<V> uniApplyStage(Executor e, Function<? super T,? extends V> f) {if (f == null) throw new NullPointerException();CompletableFuture<V> d = new CompletableFuture<V>();if (e != null || !d.uniApply(this, f, null)) {UniApply<T,V> c = new UniApply<T,V>(e, d, this, f);push(c);c.tryFire(SYNC);}return d;
}

thenApply 方法源码thenApply 方法接收一个 Function 函数,用于对 CompletableFuture 的结果进行转换。它会创建一个新的 CompletableFuture 对象,并将转换操作封装成 UniApply 对象。如果当前任务已经完成,则直接执行转换操作;否则,将 UniApply 对象添加到等待队列中,等待当前任务完成后再执行转换操作。

http://www.dtcms.com/wzjs/404470.html

相关文章:

  • 武汉网站建设哪家强榆林市网站seo
  • 小学生的做试卷儿的网站 你这免费推广网站排行榜
  • asp动态网站开发实训教程seo学途论坛网
  • 做海淘的网站网络营销方式有哪些分类
  • 好看的网站首页图片微信营销软件手机版
  • 网站建设只有20%的利润软文写作公司
  • 企业建网站的步骤百度一下网页版
  • 微建站平台冯站长之家
  • 网站如何做二级域名小红书笔记关键词排名优化
  • 网站文章快速被收录莆田百度推广开户
  • 成都商城网站开发快手seo关键词优化
  • 网站建设落地页网站优化公司
  • 做外贸纱线用什么网站seo排名赚app官网
  • dw网页制作教程个人网站b站刺激战场视频
  • 西安企业自助建站网络营销薪酬公司
  • 上海网站建设与设计公司好谷歌关键词热度查询
  • 17网站一起做网店怎么拿货网络推广运营
  • 做设计的网站有哪些磁力吧最佳搜索引擎
  • 企业163邮箱登录百度seo排名软
  • 广告设计与制作专升本考试科目搜索引擎优化排名工具
  • 网站二级页面怎么做合肥网络推广服务
  • 企业公司网站制作域名注册 阿里云
  • 盘锦做网站选哪家竞价排名采用什么计费方式
  • 如何评价一个网站西安百度推广优化托管
  • 企业网站wordpress网站服务器地址查询
  • 广东微信网站制作多少钱东莞网站推广方案
  • 商城建设网站的原因百度推广登录官网入口
  • 重庆seo优深圳整站seo
  • 2018网站流量怎么做seo策略工具
  • 东莞加盟网站建设seo网站优化培训