synchronized 和 ReentrantLock 该用哪个?

来源:互联网 发布:数据脱敏公司 编辑:程序博客网 时间:2024/04/28 01:17

Jdk 1.5

 关于synchronized和ReentrantLock的性能问题,Brian Goetz对这两种锁在JDK 1.5与单核处理器,以及JDK 1.5与双Xeon处理器环境下做了一组吞吐量对比的实验 [1] ,实验结果如图13-1和图13-2所示。

 

  JDK 1.5、单核处理器下两种锁的吞吐量对比

所以在 jdk 1.5 中,Synchronized 在多线程环境下性能下降严重,所以选择 ReentrantLock 。

 

Jdk 1.6

JDK 1.6中加入了很多针对锁的优化措施,如自旋锁、轻量级锁、偏向锁。synchronized与ReentrantLock的性能基本上是完全持平了。所以性能不是考虑该用哪个的因素。功能才是。

 

 

 

总结:

虚拟机在未来的性能改进中肯定也会更加偏向于原生的synchronized,毕竟是关键字,亲生的,所以还是synchronized能实现需求的情况下,优先考虑使用synchronized来进行同步。而且 synchronized 不用考锁释放的问题,更易写出安全的代码。


原创粉丝点击