在Java中原子变量对锁的惩罚



对于我当前的项目,当我们有超过1个线程访问它时,我尽量使用原子整数和原子布尔值。这有助于保持逻辑锁自由(内部我知道它可能仍然使用锁)和代码更干净。这个用例主要用于可能突然改变的配置标签。

我想知道使用原子变量的性能损失是什么,这会不会频繁地使缓存失效,实际上使我的解决方案不如使用锁?

atomic* classes不使用锁,它使用CAS(比较与设置)来实现线程安全。一般来说,它们比锁变体更快,但是在非常高的争用下,它们实际上往往更慢。如果你想打个比方,这就像是DB中的乐观锁定和悲观锁定。

如果您对更多细节感兴趣,您可能需要检查Java性能:权威指南书。

ADD:对于缓存,我假设您指的是happens-before关系。这是引用自oracle教程:

java.util.concurrent.atomic包定义了支持对单个变量的原子操作。所有类都有get和set类似于对易失性变量进行读写的方法。那一个集合是否与任何后续的集合有发生前的关系相同的变量

相关内容

  • 没有找到相关文章

最新更新