jdk1.8为什么要用synchronized关键字代替reentrantlock
时间: 2023-11-14 21:36:05 浏览: 37
Synchronized和ReentrantLock都是Java中用来实现线程同步的机制。在JDK1.8之前,ReentrantLock的性能比Synchronized差,因此Synchronized是Java中使用最广泛的同步机制。但是在JDK1.8中,Synchronized进行了优化,性能得到了大幅提升,因此在很多情况下,Synchronized已经可以替代ReentrantLock。同时,Synchronized的使用也更加简单,代码更加清晰易懂。因此,JDK1.8中推荐使用Synchronized来实现线程同步。
相关问题
jdk1.8ConcurrentHashMap使用什么加锁?
在JDK1.8中,ConcurrentHashMap并没有使用传统的锁机制来保证线程安全,而是使用了一种称为“分段锁”的机制。它把整个Map分成了多个Segment,每个Segment默认情况下都是由一个ReentrantLock来保护的,这样不同的Segment之间就可以被并发访问。在ConcurrentHashMap中,put()、remove()、get()等操作只锁定当前要操作的Segment,而不会锁定整个Map,这样就可以大大提高并发效率。同时,在JDK1.8中,ConcurrentHashMap也引入了一种新的机制,即CAS和synchronized来保证线程安全。
jdk1.8synchronize的变化
在JDK 1.8中,ConcurrentHashMap的实现进行了完全重构。相对于JDK 1.7的版本,JDK 1.8的ConcurrentHashMap的数据结构更接近HashMap。它使用了synchronized和CAS(Compare and Swap)来进行同步操作,而不再使用分段锁的概念。锁的粒度也降低了,不再是基于Segment的锁,而是对每个桶(数组中的头节点)加锁。这样的改变使得操作更加清晰流畅。此外,JDK 1.8还使用红黑树来优化链表,当链表长度超过一定阈值时,会将链表转换为红黑树,提高遍历效率。总的来说,JDK 1.8的ConcurrentHashMap的实现更简单,操作更清晰流畅,同时也提高了性能。\[1\]\[2\]
另外,关于synchronized的变化,JDK 1.8之前的版本中,synchronized是通过底层的操作系统Mutex Lock来实现的,这种锁被称为"重量级锁"。由于锁的获取和释放需要从用户态转换到核心态,导致性能较低。但是在JDK 1.6之后,为了提高性能,引入了"轻量级锁"和"偏向锁"的概念,使得synchronized的效率与ReentrantLock相差无几,甚至在某些场景下更优于ReentrantLock。因此,在JDK 1.8中,synchronized的性能得到了提升。\[3\]
#### 引用[.reference_title]
- *1* [JDK1.8的ConcurrentHashMap底层实现解析](https://blog.csdn.net/qq_51901495/article/details/126320698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [Java集合源码剖析——基于JDK1.8中ConcurrentHashMap的实现原理](https://blog.csdn.net/weixin_43823808/article/details/126732474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Synchronized原理和jdk1.8后的优化](https://blog.csdn.net/qq_35152037/article/details/105463688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]