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

函数和并发流的结合使用

作者: 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