美文网首页
函数和并发流的结合使用

函数和并发流的结合使用

作者: zxbyh | 来源:发表于2023-07-28 19:38 被阅读0次

一 场景:比如说这儿要获取sku的信息,要根据属性定义id和属性值id获取到对应的信息。其实这两个没有关系,就可以使用并发执行。
1 不使用并发的实现

    private String _loadSkuInfoOne(String skuSpecDefIdAndValId){
        String defId = StringUtils.substringBefore(skuSpecDefIdAndValId,":");
        String valId = StringUtils.substringAfter(skuSpecDefIdAndValId,":");

        String spName = itemDao.tbSpecDef.rowOptional(Convert.toLong(defId)).map(x->x.s("spName")).orElse("");
        String spvName = itemDao.tbSpecVal.rowOptional(Convert.toLong(valId)).map(x->x.s("spvName")).orElse("");

        return spName+":"+spvName;
    }

2 使用并发实现的方法一:

    private String _loadSkuInfoOne(String skuSpecDefIdAndValId){
        String defId = StringUtils.substringBefore(skuSpecDefIdAndValId,":");
        String valId = StringUtils.substringAfter(skuSpecDefIdAndValId,":");

        List<Supplier<String>> supplierList = List.of(
            ()->itemDao.tbSpecDef.rowOptional(Convert.toLong(defId)).map(x->x.s("spName")).orElse(""),
            ()->itemDao.tbSpecVal.rowOptional(Convert.toLong(valId)).map(x->x.s("spvName")).orElse("")
        );
        return supplierList.parallelStream().map(x->x.get()).collect(Collectors.joining(":"));
    }

3 使用并发实现的方法二

    private String _loadSkuInfoOne(String skuSpecDefIdAndValId){
        String defId = StringUtils.substringBefore(skuSpecDefIdAndValId,":");
        String valId = StringUtils.substringAfter(skuSpecDefIdAndValId,":");

        AtomicReference<String> spName = new AtomicReference<>();
        AtomicReference<String> spvName = new AtomicReference<>();
        List<Runnable> runnableList = List.of(
            ()->spName.set(itemDao.tbSpecDef.rowOptional(Convert.toLong(defId)).map(x -> x.s("spName")).orElse("")),
            ()->spvName.set(itemDao.tbSpecVal.rowOptional(Convert.toLong(valId)).map(x->x.s("spvName")).orElse(""))
        );
        runnableList.parallelStream().forEach(x->x.run());
        return spName.get()+":"+spvName.get();
    }

相关文章

网友评论

      本文标题:函数和并发流的结合使用

      本文链接:https://www.haomeiwen.com/subject/xwldpdtx.html