码上敲享录 > java面试题及答案大全 > ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是如ReentranLock这样的可重入锁?

ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是如ReentranLock这样的可重入锁?

上一章章节目录下一章 2023-07-11已有219人阅读 评论(0)

在Java 8中的`ConcurrentHashMap`中,确实采用了`synchronized`而不是像`ReentrantLock`这样的可重入锁的主要原因是为了性能考虑。


使用`synchronized`可以提供不错的并发性能,尤其是在低争用情况下。Java的`synchronized`关键字在JVM层面上进行了大量的优化,以减少锁竞争的开销。此外,JVM还提供了适应性自旋(Adaptive Spinning)和偏向锁等技术,以在无竞争情况下进一步减少锁的开销。


与之相反,`ReentrantLock`是一个显式的锁,它提供了更多的功能和灵活性,例如可重入性、公平性、中断等。但相对于`synchronized`,它需要更多的资源和开销,包括更多的代码生成,额外的内存开销和上下文切换等。


在Java 8之前,`ConcurrentHashMap`使用了分段锁实现,并取得了不错的性能。而在Java 8中,针对高并发场景的改进采用了`CAS`操作和`synchronized`结合使用的方式。这种方式在性能方面已经经过了深入的优化和测试,可以提供良好的并发性能和可伸缩性。


所以,虽然`ReentrantLock`是一种功能更强大的锁,但在Java 8中的`ConcurrentHashMap`中选择使用`synchronized`是为了与整体设计的性能目标和优化考虑相匹配。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交