开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
java-labrary
/
thread
/
src
/
test
/
java
/
FutureLesson3.java
java-labrary
/
thread
/
src
/
test
/
java
/
FutureLesson3.java
FutureLesson3.java 5.67 KB
一键复制 编辑 原始数据 按行查看 历史
jqxu 提交于 2022年12月13日 17:25 +08:00 . feat: camunda
import com.google.common.collect.Maps;
import com.tplhk.thread.completeableFuture.service.CarInfo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @ClassName :
* @Description : 另一个经典的例子
* @Author : jqxu
* @Date: 2022年4月27日 9:11
**/
@Slf4j
@SpringBootTest(classes = {FutureLesson3.class})
public class FutureLesson3 {
ExecutorService taskExecutor = Executors.newFixedThreadPool(10);
/**
* complex 的使用
* 1. 在线程中取得cars列表
* 2. 遍历cars ,每个car 在独立线程中调用 rating(carName) 得到一个评分
* 3. 所有 cars 评分得到后,打印car信息和评分
*
* @throws InterruptedException
* @throws TimeoutException
* @throws ExecutionException
*/
@Test
public void complex() throws InterruptedException, TimeoutException, ExecutionException {
long start = System.currentTimeMillis();
log.info("{} ", Thread.currentThread().getName());
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.supplyAsync(() -> getCarInfo(), taskExecutor).thenApplyAsync((v) -> {
Map<Integer, String> colorMapper = colorMapper(v);
CarWapper carWapper = new CarWapper();
carWapper.setCarInfoList(v);
carWapper.setColorMapper(colorMapper);
return carWapper;
}).thenApplyAsync((v) -> {
log.info("处理具体业务线程[{}]", Thread.currentThread().getName());
int step = 3;
int carInfoListSize = v.getCarInfoList().size();
List<CarInfo> ret = Lists.newArrayList();
for (int i = 0; i < carInfoListSize; i = i * step) {
log.info("begin : {} ====================================================", i);
List<CarInfo> list = v.getCarInfoList().subList(i, i + step);
ret.addAll(threadHandle(list, v.getColorMapper()).join());
log.info("end : {} ====================================================", i);
i++;
}
return ret;
}).thenAcceptAsync((v) -> {
log.info("保存结果线程[{}]", Thread.currentThread().getName());
log.info("保存:{}", v.toString());
});
for(;;){
if(voidCompletableFuture.isDone()){
break;
}
Thread.sleep(1 * 1000);
}
}
public List<CarInfo> getCarInfo() {
log.info("初始化要处理的数据[{}] ", Thread.currentThread().getName());
List<CarInfo> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
CarInfo carInfo = new CarInfo();
carInfo.setId(i);
carInfo.setCarName("car" + i);
list.add(carInfo);
}
return list;
}
private Map<Integer, String> colorMapper(List<CarInfo> list){
log.info("创建映射关系[{}],colorMapper.list=={}", Thread.currentThread().getName(), list.toString());
Map<Integer, String> colorHashMap = Maps.newHashMap();
colorHashMap.put(0,"red");
colorHashMap.put(1,"green");
colorHashMap.put(2,"yellow");
colorHashMap.put(3,"browse");
colorHashMap.put(4,"white");
colorHashMap.put(5,"bule");
return colorHashMap;
}
private CompletableFuture<List<CarInfo>> threadHandle(List<CarInfo> list, Map<Integer, String> colorMapper) {
log.info("我要在线程中处理多条业务数据[{}]: {} ", Thread.currentThread().getName(), list.toString());
ExecutorService taskExecutor = Executors.newFixedThreadPool(10);
return CompletableFuture.completedFuture(list).thenComposeAsync((v) -> {
log.info("我要在(子)线程中处理多条业务数据[{}] ", Thread.currentThread().getName());
List<CompletableFuture<CarInfo>> completableFutureList = v.stream()
.map(car -> doCarInfo(car, colorMapper))
.collect(Collectors.toList());
return CompletableFuture.allOf(completableFutureList.toArray(new CompletableFuture[completableFutureList.size()]))
.thenApply(all -> completableFutureList.stream()
.map(item -> item.handle((carinfo, e) -> {
if (null != e) {
log.info("{} error!!!", carinfo.getCarName());
return null;
}
return carinfo;
}))
.map(item -> item.join())
.filter(Objects::nonNull).collect(Collectors.toList()));
}, taskExecutor).thenApplyAsync(Function.identity());
}
private CompletableFuture<CarInfo> doCarInfo(CarInfo carInfo, Map<Integer, String> colorMapper){
return CompletableFuture.completedFuture(carInfo).thenApplyAsync((v) -> {
log.info("我要在(孙)线程中处理每一条业务数据[{}] : {}", Thread.currentThread().getName(), carInfo.toString());
try {
Thread.sleep( 5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
v.setColorMapper(colorMapper.getOrDefault(v.getId(), "black"));
return v;
});
}
@Data
class CarWapper{
List<CarInfo> carInfoList;
Map<Integer, String> colorMapper;
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

学习demo
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/minimoto/java-labrary.git
git@gitee.com:minimoto/java-labrary.git
minimoto
java-labrary
java-labrary
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /