JAVA面试题:Synchronized和Lock的区别?

Synchronized和Lock的区别?

在这里插入图片描述
1.synchronized是java的关键字,lock是一个类
2.synchronized在异常时会自动释放锁,而lock是不会自动释放锁,需要在finally中手动释放锁。
3.synchronized是不能响应中断的,就是说,如果线程被阻塞,后面的线程也会一直等待。lock是可以响应中断,不用一直等待。
4.synchronized是无法判断锁的状态,也不知道有没有获取锁,lock是可以判断锁的状态,并可以通过trylock来得知是否获取到锁了。
5.synchronized是非公平锁,即后面等待的线程是没有顺序的,谁能抢到谁执行。lock是可以实现公平锁,只需要在创建锁时new ReentrantLock(true),便可以达到不插队的情况,区别是内部多了一个hasQueuedPredecessors()方法,它会在AQS中没有线程的情况下才去申请锁,非公平锁不管AQS中有没有线程都会申请锁。
6.性能方面Lock在竞争激烈情况下性能要好
7.synchronized是cpu悲观锁,即线程拥有的是独占锁。lock属于乐观锁,每次不加锁,假设没有冲突的发生,如果发生了冲突就会不断的重试。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值