synchronized和ReentrantLock的异同点

目前不涉及原理层面的比较,简单介绍一下两者的异同

相同点

1.在功能上它们都是通过加锁方式来协调多线程对共享变量的访问,而且都是同步式阻塞。

2.都是可重入锁,即一个线程可以多次获得同一把锁。

3.都保证了可见性、原子性(互斥性)。

不同点

1.两者最大的区别就是synchronized是Java内置的关键字,是原生语法层面的互斥,是JVM层面的同步机制。而ReentrantLock是JDK5之后提供的API层面的互斥锁,需要lock(),unlock()方法结合try/finally语句实现。

2.在性能上,synchronized优化前,它的性能相比ReentrantLock要差一些。但在synchronized优化后,两者性能差距不大了。

3.synchronized隐式地获得、释放锁,ReentrantLock显式地获得、释放锁。

4.相比于synchronized,ReentrantLock提供了一些高级功能,主要有三种。

  • 等待可中断,即持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待。这相对于synchronized来说可以避免出现死锁的情况。通过lock.lockInterruptibly()来实现这个机制。
  • ReentrantLock可以实现公平锁
  • ReentrantLock可以通过Condition类绑定多个条件,实现分组唤醒需要唤醒的线程们。synchronized只能随机唤醒一个线程或唤醒全部线程。

5.通过Lock能知道是否成功获取到锁,而synchronized无法做到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值