synchronized 和 Lock 和 ReentrantLock 有什么区别

synchronized 和 Lock 有什么区别:

  1.  synchronized 是Java内置关键字,在jvm层面,Lock是个java类。
  2. synchronized 无法判断是否获取锁的状态,Lock 可以判断是否获取到锁。
  3. synchronized 会自动释放锁,Lock 需要在 finally 中手工释放锁(unlock() 方法释放锁),否则容易造成线程死锁。
  4. 用 synchronized 关键字的两个线程1和线程2,如果当前线程1获得锁,线程2等待。如果线程1堵塞了,线程2会一直等待下去;而Lock 锁就不一定会等待下去,如果尝试获取不到锁,线程可以不同一直等待就结束了。
  5. synchronized 的锁可重入、不可中断、非公平,而 Lock 锁可重入、可判断、可公平。
  6. Lock 锁适合大量同步代码的同步问题,而 synchronized 锁适合代码少量的同步问题。

 

synchronized 和 ReentrantLock 的区别:


synchronized 是Java中的关键字,ReentrantLock是类,这是二者本质区别。既然 ReentrantLock 是类,那么它就提供了比synchronized 更多灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量,ReentrantLock 比synchronized 的扩展性体现在几点上:

  1. ReentrantLock 可以对获取锁的等待时间进行设置,这样就避免了死锁发生
  2. ReentrantLock 可以获取各种锁的信息
  3. ReentrantLock 可以灵活的实现多路通知

另外,二者的锁机制其实也是不一样的,ReentrantLock 底层调用的是 Unsafe的park 方法加锁,synchronized 操作的应该是对象头中的 mark word。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值