Skip to content

Commit ba2509a

Browse files
authored
Update synchronized.md
1 parent 01daf6a commit ba2509a

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

docs/java/Multithread/synchronized.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ synchronized 是依赖于 JVM 实现的,前面我们也讲到了 虚拟机团
164164

165165
如果你想使用上述功能,那么选择ReenTrantLock是一个不错的选择。
166166

167+
**synchronized 异常就会释放锁,而 ReenTrantLock 异常需要在 finally 里 unlock**
168+
167169
**④ 性能已不是选择标准**
168170

169171
在JDK1.6之前,synchronized 的性能是比 ReenTrantLock 差很多。具体表示为:synchronized 关键字吞吐量随线程数的增加,下降得非常严重。而ReenTrantLock 基本保持一个比较稳定的水平。我觉得这也侧面反映了, synchronized 关键字还有非常大的优化余地。后续的技术发展也证明了这一点,我们上面也讲了在 JDK1.6 之后 JVM 团队对 synchronized 关键字做了很多优化。**JDK1.6 之后,synchronized 和 ReenTrantLock 的性能基本是持平了。所以网上那些说因为性能才选择 ReenTrantLock 的文章都是错的!JDK1.6之后,性能已经不是选择synchronized和ReenTrantLock的影响因素了!而且虚拟机在未来的性能改进中会更偏向于原生的synchronized,所以还是提倡在synchronized能满足你的需求的情况下,优先考虑使用synchronized关键字来进行同步!优化后的synchronized和ReenTrantLock一样,在很多地方都是用到了CAS操作**

0 commit comments

Comments
 (0)