根据标准锁的分类
- 偏向锁 / 轻量级锁 / 重量级锁;
- 可重入锁 / 非可重入锁;
- 共享锁 / 独占锁;
- 公平锁 / 非公平锁;
- 悲观锁 / 乐观锁;
- 自旋锁 / 非自旋锁;
- 可中断锁 / 不可中断锁。
偏向锁 / 轻量级锁 / 重量级锁
偏向锁
故名思就是偏向锁的拥有者,就可以直接获得锁,开销很小,性能最好。
轻量级锁
它是从偏向锁升级到的轻量级锁,竞争时间短,用CAS
实现的并且线程会通过自旋的形式尝试获取锁,而不会陷入阻塞。
重量级锁
轻量级锁不满足就会生成重量级锁,重量级锁会让其他
申请却拿不到锁的线程进入阻塞状态。
锁发生的顺序:无锁→偏向锁→轻量级锁→重量级锁
可重入锁 / 非可重入锁
可重入锁指是线程当前已经持有这把锁了,能在不释放这把锁
的情况下,再次获取这把锁。
非可重入锁线程获取到锁,在不释放的情况下不能再次获取锁。
可重入锁典型的就是ReentrantLock
共享锁 / 独占锁
共享锁可以被多个同时线程获得;独占锁是只能被同一个线程获得的。
读写锁的理念正好诠释了共享锁和独占锁,读锁是共享说而写锁就是独占锁。
公平锁 / 非公平锁
公平锁是线程排队先到先得,不能插队;
非公平锁是线程可以插队。
悲观锁 / 乐观锁
悲观锁获取资源之前,必须先拿到锁
乐观锁利用 CAS 理念,在不独占资源的情况,完成了对资源的修改。
自旋锁 / 非自旋锁
利用cpu资源,自旋锁是线程自我旋转;
非自旋锁是拿不到锁就直接放弃,或者进行其他
的处理逻辑,例如去排队、陷入阻塞。
可中断锁 / 不可中断锁
可中断锁是一旦线程申请了锁,就没有回头路了,只能等到拿到锁以后才能进行其他的逻辑处理。
可中断锁是不想获取了,可以在中断之后去做其他的事情。
CAS(Compare and Swap)是一种乐观锁技术,用于实现并发算法。CAS操作包含三个操作数:内存位置、预期原值和新值。在执行CAS操作时,如果内存位置的值与预期原值相匹配,则处理器会自动将该位置更新为新值;如果不匹配,则处理器不做任何操作。CAS允许多个线程同时尝试更新同一个变量,但只有一个线程能够成功。CAS是实现原子性的关键技术之一,可以保证在并发环境下的安全性。CAS操作适用于自旋锁、无锁队列、CAS-based的并发控制等场景。