synchronized和Lock的异同

synchronized和Lock的异同

  • Java提供了两种锁机制实现对某个共享资源的同步:synchronized和Lock
    1. synchronized:多个线程访问同一个共享资源,将该资源设置为锁对象,调用Object类中wait(),notify()和notifyAll()调度机制进行线程之间的通信。
    2. Lock:使用Condition进行线程之间的调度
  • 两者的区别:
    1. 用法不一样:synchronized是交给JVM执行的,Lock是通过代码调用实现的,比synchronized有更精准的语义。
      • 在需要同步的对象加入synchronized控制,可以加载特定的代码上;也可以加在方法上。在特定的代码块上,括号中为锁对象,也就是要共享的资源。
      • Lock现实的指定起始位置和终止位置
    2. 性能不一样:在JDK1.5中中增加了一个Lock接口的实现类ReentrantLock。它不仅拥有和synchronized相同的并发性和内存语义,还多了锁投票,定时锁,等候和中断锁等。在不同的情况下会有所不同:在竞争资源不是很激烈的情况下,synchronized的性能下降的很快,ReentrantLock性能保持不变
    3. 锁机制不一样:synchronized获得锁和释放的方式都是在代码块结构中的,当获取多个锁时,必须以相反的顺序释放,并且是自动释放,不会因为出现了异常导致锁没有被释放而引发死锁。ReentrantLock需要手动解锁,必须在finally块中释放,否则会出现死锁问题。
      1. 可以通过tryLock方法,采用非阻塞方式去尝试获得锁资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值