公平锁和非公平锁:
公平锁:
获取锁的顺序按照申请的顺序,先来后到
非公平锁:
获取锁的顺序不是按照申请锁的顺序,后申请的可能比先申请的先获得锁,可能会造成优先级反转或饥饿现象
可重入锁:
线程可以进入与它持有同一把锁的代码块
ReentrantLock、Synchronized就是典型的可重入锁
可重入锁的作用:
避免死锁
public sync void method01(){
method02();
}
public sync void method02(){
}
自旋锁:
尝试获取锁的线程不会立即阻塞,而是通过循环的方式获取锁
好处:
减少了上下文切换的消耗
坏处:
循环会消耗CPU
读写锁(ReentrantReadWriteLock)
读锁:共享锁
写锁:独享锁(保证了原子性,中间不能被打断)
ReentrantLock可以保证写的原子性,但不能实现读的共享