java面试题/认证答辩 --- 锁
参考:
> https://blog..net/xy3233/article/details/109148096 > https://blog..net/xy3233/article/details/109148052 > https://blog..net/xy3233/article/details/109148234
常见问题: 死锁原因(必要条件缺一不可): ① 互斥② 不可剥夺③ 请求与保持④ 循环等待 死锁解法:只要破坏四个条件之一即可 ① 超时放弃② 顺序请求
java中的锁synchronized 和 Lock synchronized: java关键字,锁在JVM层面, 无法判断锁状态, 出现异常自动释放,是一个非公平锁,可重入锁(计数器实现)。 锁膨胀:随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁,但是锁的升级是单向的,也就是说只能从低到高升级,不会出现锁的降级. synchronized锁有四种状态: 偏向锁:无实际竞争,且将来只有第一个申请锁的线程会使用锁。 轻量级锁:无实际竞争,多个线程交替使用锁;允许短时间的锁竞争。 重量级锁:有实际竞争,且锁竞争时间长。
synchronized,可以加在代码块上,也可以加在方法上 synchronized + static 锁对象时class对象 synchronized 方法/代码块 锁对象时this
Lock:Lock是一个接口,主要实现类有ReentrantLock, ReentrantReadWriteLock(ReadLock,WriteLock) Lock发生异常不会自动释放,必须要在finally中释放锁
ReentrantReadWriteLock: 有读锁和写锁 读锁和写锁是互斥锁 读锁本身是一个共享锁 写锁是一个独享锁
并发包会专门开一篇
上一篇:
Java基础知识总结(2021版)