Java面试题:synchronized和Lock的区别

一、锁类型

  1. 可重入锁:在执行的对象中,所有同步方法不用再次获得锁。Synchronized和ReentrantLook都是可重入锁。

  2. 可中断锁:在等待获取过程中可中断。Synchronized内置锁是不可中断锁,ReentrantLock可以通过lockInterruptibly方法中断显性锁。

  3. 公平锁:按等待获取锁的进程获取,等待时间长的具有优先获取锁的权力。synchronized隐性锁是非公平锁,它无法保证等待的线程获取锁的顺序,ReentrantLook可以自己控制是否公平锁。

  4. 读写锁:对资源读取和写入的时候拆分为两部分处理,读的时候可以多线程一起读,写的时候必须同步写。ReadWriteLock是一个读写锁,通过readLock()获取读锁,通过writeLock()获取写锁。

二、synchronized和Lock的区别

  • synchronized是Java的一个关键字;Lock是一个接口。

  • synchronized在线程异常时会自动释放锁,不会发生死锁;Lock在线程异常时,不会自动释放锁,需要在异常抛出的finally中实现释放锁。

  • sybchronized是非中断锁,需等待线程执行完成才能释放锁;而Lock是可以中断锁。

  • 在性能上,synchronized是少量同步,而Lock是大量同步。

  • synchronized的锁状态是无法判断的,Lock的锁状态是可以判断的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值