在Java 1.7中哪个更贵 - java.util.concurrent.locks.ReentrantLock或同步块?

时间:2012-03-05 22:57:34

标签: java concurrency

锁定的特殊功能,哪一个更贵?我找不到任何基准。

对于不需要特殊功能的情况,Lock有什么优势吗?

感谢。

3 个答案:

答案 0 :(得分:4)

根据Oracle / David Dice's Weblog J2SE 6, 2006(我刚通过一些谷歌搜索找到的),没有太大的区别。也许从那时起事情发生了变化,但我对此表示怀疑。

另请参阅此comparison of Lock and ReentrantLock,其中包含一些基准测试(以及基准测试的源代码,您可能希望在synchronized块上运行它)并解决公平锁和不公平锁之间的一些差异。 / p>

这个问题的一个答案:Mixing synchronized() with ReentrantLock.lock()在使用写时复制集合时链接到a benchmark between different locks

无论如何,对性能最重要的影响是你的锁定策略,即如果它们构成了应用程序的瓶颈,确保尽可能缩短资源锁定。

答案 1 :(得分:3)

Lock的优势在于您不必以获得锁的方式释放锁;你可以做tryLock()之类的事情,以及基本同步所没有的各种其他便利功能。

答案 2 :(得分:3)

一位同事今天下午写了一个聪明的测试,发现ReentrantLock的速度是同步速度的两倍多(超过500个线程执行60,000次迭代),降级速度慢,并且GC影响较小。

1.6和1.7 jvms。 (在1.5中,同步表现更差)

似乎同步对于低争用区域来说很好,但是Lock为了更高的争用使用而打开了大门。