并发编程:synchronized和lock有什么区别,什么时候用synchronized?什么时候用lock?

这个问题要从两个角度回答:

非功能层面

坊间传闻,从synchronized被优化后,效率略微高于lock,比较有利的证据是在1.8中ConcurrentHashMap处理同步时,直接使用了synchronized而不再使用lock。这个从某种程度上说明sun对自己的亲儿子还是比较认可的。
在这里插入图片描述

功能层面

  1. lock支持tryLock、lockInterruptibly和超时获取锁,synchronized都不支持
  2. lock支持公平、非公平两种锁,但是synchronized只能是非公平
  3. 使用lock时,必须手动unlock(从书写规范的角度看,必须在finally中unlock),但是synchronized不需要关心unlock,编译器会处理
  4. lock支持多条件(多condition)的等待队列,synchronized只有一个等待队列(object.wait())
  5. lock中有读写锁,可以做到读读并发,读写互斥,写写互斥,但是synchronized做不到
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值