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

青岛比较知名的网站建设公司/南京百度推广

青岛比较知名的网站建设公司,南京百度推广,唯品会网站推广策略,psd简单的网站首页CompletableFuture 是 Java 8 引入的一个用于异步编程的类&#xff0c;它是 Future 接口的增强版本。以下是主要特点和常用方法&#xff1a; 基础创建&#xff1a; // 创建一个完成的 Future CompletableFuture<String> cf1 CompletableFuture.completedFuture("…

CompletableFuture 是 Java 8 引入的一个用于异步编程的类,它是 Future 接口的增强版本。以下是主要特点和常用方法:

  1. 基础创建
// 创建一个完成的 Future
CompletableFuture<String> cf1 = CompletableFuture.completedFuture("Hello");// 创建一个异步执行的 Future
CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> {return "Hello Async";
});
  1. 转换和链式操作
CompletableFuture.supplyAsync(() -> "Hello").thenApply(s -> s + " World")     // 转换值.thenAccept(System.out::println)   // 消费值.thenRun(() -> System.out.println("Done")); // 执行操作
  1. 组合多个 Future
CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> "World");// 组合两个 Future
cf1.thenCombine(cf2, (result1, result2) -> result1 + " " + result2).thenAccept(System.out::println);
  1. 异常处理
CompletableFuture.supplyAsync(() -> {throw new RuntimeException("出错了");
})
.exceptionally(throwable -> {System.out.println("发生错误:" + throwable.getMessage());return "默认值";
})
.thenAccept(System.out::println);
  1. 实际应用示例
public class Service {public CompletableFuture<String> getDataAsync() {return CompletableFuture.supplyAsync(() -> {// 模拟耗时操作try {Thread.sleep(1000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}return "数据";});}public void process() {getDataAsync().thenApply(data -> data + "处理").thenAccept(result -> System.out.println("结果: " + result)).exceptionally(ex -> {System.err.println("处理失败: " + ex.getMessage());return null;});}
}

主要方法说明:

  1. supplyAsync(): 异步执行有返回值的任务
  2. runAsync(): 异步执行无返回值的任务
  3. thenApply(): 转换值(类似 map)
  4. thenAccept(): 消费值(无返回值)
  5. thenCombine(): 组合两个 Future
  6. allOf(): 等待多个 Future 全部完成
  7. anyOf(): 等待多个 Future 中的任意一个完成

使用建议:

  1. 优先使用 thenCompose() 而不是 thenApply() 来组合返回 CompletableFuture 的方法
  2. 记得处理异常,可以使用 exceptionally()handle()
  3. 如果需要自定义线程池,可以在创建时指定:CompletableFuture.supplyAsync(supplier, executor)

这些是 CompletableFuture 的基础用法,它能大大简化异步编程的复杂度。需要注意的是,CompletableFuture 默认使用 ForkJoinPool.commonPool(),在生产环境中可能需要考虑使用自定义的线程池。


项目场景

批量修改信息
1)请求类,接受图片 id 列表等字段:

 @Data
public class PictureEditByBatchRequest implements Serializable {/*** 图片 id 列表*/private List<Long> pictureIdList;/*** 空间 id*/private Long spaceId;/*** 分类*/private String category;/*** 标签*/private List<String> tags;private static final long serialVersionUID = 1L;
}

2)开发批量修改图片服务,依次完成参数校验、空间权限校验、图片查询、批量更新操作:

 @Override
@Transactional(rollbackFor = Exception.class)
public void editPictureByBatch(PictureEditByBatchRequest pictureEditByBatchRequest, User loginUser) {List<Long> pictureIdList = pictureEditByBatchRequest.getPictureIdList();Long spaceId = pictureEditByBatchRequest.getSpaceId();String category = pictureEditByBatchRequest.getCategory();List<String> tags = pictureEditByBatchRequest.getTags();// 1. 校验参数ThrowUtils.throwIf(spaceId == null || CollUtil.isEmpty(pictureIdList), ErrorCode.PARAMS_ERROR);ThrowUtils.throwIf(loginUser == null, ErrorCode.NO_AUTH_ERROR);// 2. 校验空间权限Space space = spaceService.getById(spaceId);ThrowUtils.throwIf(space == null, ErrorCode.NOT_FOUND_ERROR, "空间不存在");if (!loginUser.getId().equals(space.getUserId())) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR, "没有空间访问权限");}// 3. 查询指定图片,仅选择需要的字段List<Picture> pictureList = this.lambdaQuery().select(Picture::getId, Picture::getSpaceId).eq(Picture::getSpaceId, spaceId).in(Picture::getId, pictureIdList).list();if (pictureList.isEmpty()) {return;}// 4. 更新分类和标签pictureList.forEach(picture -> {if (StrUtil.isNotBlank(category)) {picture.setCategory(category);}if (CollUtil.isNotEmpty(tags)) {picture.setTags(JSONUtil.toJsonStr(tags));}});// 5. 批量更新boolean result = this.updateBatchById(pictureList);ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
}

上述是调用mybatis plusupdateBatchById 批量更新的操作。如果要处理大量数据,可以使用线程池 + 分批 + 并发进行优化,参考代码如下:

 @Resource
private ThreadPoolExecutor customExecutor;/*** 批量编辑图片分类和标签*/
@Override
@Transactional(rollbackFor = Exception.class)
public void batchEditPictureMetadata(PictureBatchEditRequest request, Long spaceId, Long loginUserId) {// 参数校验validateBatchEditRequest(request, spaceId, loginUserId);// 查询空间下的图片List<Picture> pictureList = this.lambdaQuery().eq(Picture::getSpaceId, spaceId).in(Picture::getId, request.getPictureIds()).list();if (pictureList.isEmpty()) {throw new BusinessException(ErrorCode.NOT_FOUND_ERROR, "指定的图片不存在或不属于该空间");}// 分批处理避免长事务int batchSize = 100;List<CompletableFuture<Void>> futures = new ArrayList<>();for (int i = 0; i < pictureList.size(); i += batchSize) {List<Picture> batch = pictureList.subList(i, Math.min(i + batchSize, pictureList.size()));// 异步处理每批数据CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {batch.forEach(picture -> {// 编辑分类和标签if (request.getCategory() != null) {picture.setCategory(request.getCategory());}if (request.getTags() != null) {picture.setTags(String.join(",", request.getTags()));}});boolean result = this.updateBatchById(batch);if (!result) {throw new BusinessException(ErrorCode.OPERATION_ERROR, "批量更新图片失败");}}, customExecutor);futures.add(future);}// 等待所有任务完成CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
}

示例图如下

在这里插入图片描述

http://www.whsansanxincailiao.cn/news/32008710.html

相关文章:

  • 淄博网站建设优惠臻动传媒/网络营销的12种手段
  • wordpress多少文章/百度seo优化技术
  • 没有收款接口网站怎么做收款/seo咨询服务价格
  • 阿里巴巴国际网站做网站可以吗/百度推广助手客户端
  • 做cpa的博客网站类型/湖北网络推广有限公司
  • 360浏览器打不开90设计网站/南宁seo手段
  • 国家对小微企业扶持2022政策/热狗网站关键词优化
  • 商城平台/济南seo优化外包服务
  • 如何选择企业建站公司/长沙网站优化效果
  • 下载企业微信app免费/湘潭seo培训
  • 从0搭建一个网站/线上推广100种方式
  • 青岛企业网站建设优化/网络营销策略方案
  • 网站开发好的语言/北京网站制作推广
  • 写作网站哪个能得稿费/营销策略都有哪些方面
  • 做蛋糕视频教学网站/seo关键词
  • 做特卖网站/今日热点新闻2022
  • 长春网站建设招代理/关键词优化公司电话
  • 手机企业网站源码/手机优化软件哪个好用
  • 沈阳做网站黑酷科技/引流用什么话术更吸引人
  • 小视频解析网站怎么做/北京网络营销推广培训哪家好
  • 摄影网站建设方案/作品提示优化要删吗
  • 公司网站建设一年多少钱/经典软文案例分析
  • 宣传页制作/seo关键词快速提升软件官网
  • 宿迁网站设计/seo网络推广方法
  • 公司做网站流程流程/宁波seo推广外包公司
  • 网站标题关键词怎么做/广州网站排名优化公司
  • 连云港建设企业网站/搜狗搜索网
  • 深圳商城网站设计推荐/浏览器观看b站视频的最佳设置
  • 郑州网站建设精英/下载百度2024最新版
  • 长沙营销型网站建设/成都网络推广