ConcurrentHashMap的initTable()和单例模式的双重检查锁在场景和实现上有什么差别?

新手上路,请多包涵
  1. ConcurrentHashMapinitTable()单例模式的双重检查锁在场景上有什么差别?
  2. 为什么initTable()使用CAS自旋锁,而双重检查所使用synchronized?哪个效率更高?

《深入理解Java虚拟机》看的自旋锁大概就是一下意思:

自旋锁的优点是在一个以上处理器或者核心,且锁占用时间很短的情况下,可以避免用户线程和内核的切换的消耗。

initTable()使用yield()让出CPU资源。而不是一直循环判断来占用CPU,这样不还是会有线程上下文切换的消耗?
我的理解不知道对不对:
因为yield()让出的CPU资源会大于线程上下文切换的消耗,以及不能保证一个以上处理器或者核心的运行环境。

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题