锁的分类
可重入锁、不可重入锁
重入的意思,在获取到锁A以后,再次获取A锁。
可重入锁:synchronized, ReentrantLock, ReentrantReadWriteLock
不可重入,在获取到锁A以后,再次获取锁A之前,自己必须先释放前面加的锁。
乐观锁、悲观锁
悲观锁就是,当获取不到锁资源时,会将当前线程挂起,即进入BLOCKED或WAITING状态。
线程的挂起会涉及到用户态和内核态的切换。
用户态:JVM可以自行执行的指令。
内核态:需要操作系统才可以执行。
悲观锁:synchronized, ReentrantLock, ReentrantReadWriteLock
乐观锁:获取不到锁资源,可以再次让CPU调度,重新尝试获取锁资源。
Atomic原子类中,基于CAS乐观锁实现的。
公平锁、非公平锁
synchronized只能是非公平锁。
ReentrantLock, ReentrantReadWriteLock 可以实现公平与非公平锁。
公平锁,未获取到锁时,去排队。
非公平锁,先尝试竞争抢锁,抢不到再去排队。
互斥锁、共享锁
互斥锁:synchronized、ReentrantLock
ReentrantReadWriteLock,有互斥锁,也有共享锁。
互斥锁:同一时间点,只有一个线程持有这个锁。
共享锁:同一时间点,多个线程持有。