线程之绝唱

该博客介绍了如何使用CompletableFuture进行异步处理,通过将推荐列表分块并行调用aysnCallRC339方法,以提高推荐系统的效率。在处理过程中,如果推荐列表长度小于5,则按列表大小开启线程,否则默认开启5个线程。每个线程处理一部分用户数据,并将结果合并到最终的JSONArray中。在遇到异常时,系统会记录‘同步数据失败’的信息。
摘要由CSDN通过智能技术生成
    public void executeRecommend(JSONArray arrayList, List<User> recommendList) {
        //默认开启五个线程
        int asynCount = recommendList.size() < 5 ? recommendList.size() : 5;
        List<List<String>> list = new ArrayList<>(asynCount);
        for (int i = 0; i < recommendList.size(); i++) {
            if (list.size() < asynCount) {
                List<String> temp = new ArrayList<>();
                temp.add(recommendList.get(i).getName());
                list.add(temp);
            } else {
                list.get(i % asynCount).add(recommendList.get(i).getName());
            }
        }
        CompletableFuture[] completableFutures = list.stream().map(e -> {
            return aysnCallRC339(e);
        }).toArray(CompletableFuture[]::new);

        CompletableFuture.allOf(completableFutures).join();//阻塞所有
        for (CompletableFuture temp : completableFutures) {
            try {
                JSONArray jsonArray = (JSONArray) temp.get();
                arrayList.addAll(jsonArray);
            } catch (Exception e) {
                System.out.println("同步数据失败");
            }
        }
    }

    private CompletableFuture<JSONArray> aysnCallRC339(List<String> entList) {
        return CompletableFuture.supplyAsync(() -> {
            JSONArray objectsa = new JSONArray();
            for (String recommendEnt : entList) {
                System.out.println("开始调异步");
                //假装这里调用接口
                JSONObject compositeScore = null;
                if (compositeScore == null) {
                    continue;
                } else {
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("a", "a");
                    jsonObject.put("b", "b");
                    jsonObject.put("c", "c");
                    objectsa.add(jsonObject);
                }
            }
            System.out.println("调用成功");
            return objectsa;
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值