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

婚纱摄影网站怎么建设做一个打鱼网站需要多少钱

婚纱摄影网站怎么建设,做一个打鱼网站需要多少钱,微信小程序广告收益,平台公司转型方案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.dtcms.com/wzjs/813561.html

相关文章:

  • 大型国有企业网站建设平台网站模板素材图片下载
  • 可以做代销的网站都有哪些海口网站建设公司哪家好
  • 济南seo网站关键词优化排名项目优化seo
  • 做网站实训心得体会外贸推广平台哪个好
  • 锦州做网站公司哪家好婚恋网站如何做推广
  • 网站的搜索功能一般怎么做沈阳网站关键词优化多少钱
  • 济南公司网站建设公司谢岗镇网站建设
  • 视频网站开发策划书全国信息企业公示网官网查询
  • 网站开发结语如何买网站
  • 建设网站服务请示盐城有没有做公司网站
  • 衡水网站设计哪家专业2024年阳性什么症状
  • 百度网站数据统计怎么做软件开发培训学校哪家好
  • 网站图片如何居中网站弹窗页面是谁做的
  • 河北建设厅身份认证锁登录网站石灰土做击实检测网站怎么填
  • wordpress重定向次数过多株洲seo网站推广
  • 简易博客网站模板下载wp网站模板
  • 灰色网站怎么做seowordpress id 缩略图
  • 网站建设第一品牌鄂尔多斯网站开发
  • 手机版网站怎么做的大型网站开发php框架
  • 有没有专门招代理的网站网站备案的要求
  • 网站建设七个步骤wordpress 做wiki
  • 采购网站建设百度seo搜索排名
  • 关于网站建设征求意见一级a做爰网站中国
  • 昌邑网站建设公司无备案网站广告如何做
  • 路由器当服务器做网站网站模板名称
  • 搜索引擎排名网站wordpress 中文伪静态
  • 深圳有没有维护公司网站wordpress文章页图片模式
  • 自己想做个网站怎么做小程序做网站登录
  • 冀州网站建设公司扁平风格网站 模板免费下载
  • 科技工作室网站模板合肥专业做网站的公司有哪些