[英]synchronized vs ReentrantLock vs AtomicInteger execution time
我可以看到ReentrantLock
比synchronized
快50%,而AtomicInteger
快100%。 为什么这三种同步方法的执行时间存在差异: synchronized
块, ReentrantLock
和AtomicInteger
(或Atomic
包中的任何类)。
除了这些之外还有其他流行的和扩展的同步方法吗?
影响这一点的因素有很多。
AtomicInteger使用与锁定使用相同的原语但执行繁忙等待。 CompareAndSet也称为CompareAndSwap,即它的功能更简单(并且更加有限)
ConcurrentXxxx,CopyOnWriteArrayXxxx系列非常受欢迎。 这些提供并发性而无需直接使用锁(在某些情况下根本没有锁)
AtomicInteger
比硬件上的其他两种同步方法快得多,因为它是无锁的。 在CPU提供无锁并发基本功能的体系结构中, AtomicInteger
的操作完全在硬件中执行,关键操作通常只需要一条CPU指令。 相比之下, ReentrantLock
和synchronized
使用多个指令来执行它们的任务,因此您会看到与它们相关的一些可观的开销。
我认为你在评估这三个要素进行比较时犯了一个常见的错误。
基本上,当ReentrantLock与同步密钥相比,在同步块时,您可以更灵活地使用它。 Atomic采用基于CAS(比较和交换)的不同方法来管理并发上下文中的更新。
我建议你深入阅读Java平台的并发性。
Java并发实践--BrianGöetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes和Doug Lea
拥有对并发性的深入了解并了解语言可以为您解决并发问题和利用多线程提供什么方面存在很大差异。
在性能方面,它取决于当前的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.