对于我当前的项目,我尝试使用Atomic Integers和Atomic Booleans,当我们有超过1个线程访问它时。这有助于保持逻辑锁的自由(内部我知道它可能仍然使用锁)并且代码更清晰。用例主要用于可能突然改变的配置标签。
我想知道使用Atomic Variables时的惩罚性能是什么,这会不会太频繁地使缓存失效并且实际上使我的解决方案不仅仅是使用锁?
答案 0 :(得分:0)
atomic *类不使用锁,它使用CAS(比较和设置)来实现线程安全。一般来说,它们比锁定变体更快,但是在非常高的争用下,它们实际上往往更慢。 如果你想要一些类比,那就像DB中的乐观和悲观锁定一样。
如果您对更多详情感兴趣,可以查看Java Performance: The Definitive Guide本书。
ADD :对于缓存,我假设您指的是发生在关系之前。以下是oracle tutorial的引用:
java.util.concurrent.atomic包定义了支持的类 单变量的原子操作。所有课程都已获得并设定 对volatile变量的读写操作方法。那 是的,一个集合与之后的任何一个继续发生关系 相同的变量。