Java
gnaiqil1
这个作者很懒,什么都没留下…
展开
-
一次线上死循环的排查过程
场景A写了一个服务,给B调用A的这个服务针对一个key,在一次调用完成之前不能调用第二次,如果连续调用,第二次不会执行业务,而是直接返回系统繁忙,使用ConcurrentHashMap + Atomic的cas控制。(不要吐槽我们小公司小用户量暂时没有使用水平扩展的分布式服务哦,这里就考虑了单机线程安全)// {key -> 是否正在运算}Map<Long, AtomicBoolean> map = new ConcurrentHashMap<>();pub原创 2020-06-06 15:28:57 · 429 阅读 · 0 评论 -
`Stream`的`Collectors.reducing`与`Collectors.groupingBy`
前言Java8提供的Stream接口使流式编程和函数式编程更加容易。现在一些集合的处理,经常会使用Stream来进行处理,相比循环,代码的可读性有所提高。如果更进一步,再利用上Reactor进行反应式编程,则会带来更多优势,如异常处理、执行线程控制、并行、缓冲等,声明式的完成了许多命令式编程许多代码才能完成的功能。场景一次使用Stream进行收集的过程中,同时使用Collectors.groupingBy与Collectors.reducing,出现了问题。这里记录一下。场景是一批业务对象Foo:原创 2020-05-24 14:49:07 · 2871 阅读 · 0 评论