Java Striped64解析

Striped64是在java8中添加用来支持累加器的并发组件,它可以在并发环境下使用来做某种计数,Striped64的设计思路是在竞争激烈的是候尽量分散竞争,在实现上,Striped64维护了一个base Count和一个Cell数组,计数线程会首先试图更新base变量,如果成功则退出计数,否则会认为当前竞争是很激烈的,那么就会通过Cell数组来分散计数,Striped64根据线程来计算哈希,然后将不同的线程分散到不同的Cell数组的index上,然后这个线程的计数内容就会保存在该Cell的位置上面,基于这种设计,最后的总计数需要结合base以及散落在Cell数组中的计数内容。

Java高级程序员必备:高性能计数器及Striped64和LongAdder

为了更容易理解和记忆,今后所有文章将以图解为主、代码为辅,忽略不太重要的细节,但保留关键技术细节。1.消除热点:把一个变量拆成多个变量AtomicLong之所以有性能瓶颈,是因为当有非常多的线程并发地对其执行CAS操作时,会产生大量竞争。

并发计数器使用详解!详细分析Java中Striped64类和LongAdder类

基本概念位于java.util.concurrent.atomic包.

网站地图