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

在Java 1.7-Java.util.concurrent.locks.ReentrantLock或同步块中,哪个更昂贵?,java,concurrency,Java,Concurrency,除了锁的特殊功能,哪一个更昂贵?我找不到这方面的任何基准 对于不需要特殊功能的情况,锁有什么优势吗 谢谢。根据(我刚刚通过谷歌搜索发现)没有太大区别。也许从那以后情况有所改变,但我对此表示怀疑 另请参见包含一些基准测试(以及基准测试的源代码,您可能希望在synchronized块上运行它),并解决了公平锁和不公平锁之间的一些差异 这个问题的一个答案是:使用“写时拷贝”集合时指向的链接 无论如何,对性能最重要的影响是您的锁定策略,也就是说,如果资源构成应用程序的瓶颈,请确保将它们锁定得尽可能短。锁

除了锁的特殊功能,哪一个更昂贵?我找不到这方面的任何基准

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

谢谢。

根据(我刚刚通过谷歌搜索发现)没有太大区别。也许从那以后情况有所改变,但我对此表示怀疑

另请参见包含一些基准测试(以及基准测试的源代码,您可能希望在
synchronized
块上运行它),并解决了公平锁和不公平锁之间的一些差异

这个问题的一个答案是:使用“写时拷贝”集合时指向的链接


无论如何,对性能最重要的影响是您的锁定策略,也就是说,如果资源构成应用程序的瓶颈,请确保将它们锁定得尽可能短。

锁定的优点是,您不必在获得锁定的同一方法中释放锁定;你可以做一些事情,比如
tryLock()
,以及基本同步所不具备的各种其他便捷功能。

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

在1.6和1.7 JVM中。(在1.5中,synchronized的性能要差得多)


似乎synchronized对于低争用区域来说是不错的,但是Lock为高争用打开了它的门。

+1用于锁的短寿命;因为这会影响性能,而不是锁的类型。您的第二个链接提到:“公平锁的性能接近同步块,非公平锁的性能比它们快得多。”ReentrantLock是不公平的。无论如何,一位同事写了一些东西,并验证了非公平锁确实比同步锁快得多。回到1.5版本,同步块没有那么有效(在某些有用的情况下)。在mustang(1.6)中,AWT将封装不太好的锁更改为使用
java.util.concurrent.locks
。几周后,HotSpot进行了更改,使其使用与jucl使用的基本相同的内在锁算法。您可以分享使用的基准方法(基准源代码、机器规格)吗?那会很有趣的。我希望我能。出于愚蠢的法律原因,这里写的任何东西都不能共享。