锁定的特殊功能,哪一个更贵?我找不到任何基准。
对于不需要特殊功能的情况,Lock有什么优势吗?
感谢。
答案 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为了更高的争用使用而打开了大门。