多线程整理4

synchronized 底层实现和运行原理(面试)
在这里插入图片描述

Lock的实现步骤
1.创建Lock lock = new ReentrantLock([true]);
2.加锁Lock.lock()
3.释放锁lock.unlock();
在这里插入图片描述
创建锁的时候可以指定参数 ,默认情况下创建性能更高的非公平锁,使用参数true创建公平锁

lock的使用注意事项:
1.unlock一定要放在finally里面,如果没有反到finally中,可能导致锁资源不释放,永久占用的问题
2.lock()一定要放在try的首行;可以避免没有锁却执行释放锁的操作,以及释放锁的错误信息会覆盖业务报错信息,增加调试程序修复程序的复杂度。

synchronized VS Lock(ReentrantLock):面试题
1.Lock更灵活,拥有更多方法,比如tryLock()
2.锁的类型不同,Lock默认是非公平锁,但是可以指定为公平锁
synchronized只能是非公平锁
3.synchronized是JVM层面提供的锁,自动加锁和释放锁,对于开发者无感
Lock手动进行加锁释放锁
4.synchronized可以修饰方法(静态的、普通的)和代码块
Lock只能修饰代码
5.调用Lock 和 synchronized 线程是锁的状态不同
lock方法变成waiting
synchronized会变成blocked

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值