1.悲观锁和乐观锁
悲观锁:预测场景中,非常容易出现锁冲突.
乐观锁:预测场景中,不太会出现锁冲突.
2.重量级锁和轻量级锁(和1有关联)
重量级锁:加锁开销比较大.
轻量级锁:加锁开销比较小.
开销:时间和占用系统资源.
3.自旋锁和挂起等待锁
自旋锁:轻量级锁的一种实现.在用户态下,通过自旋的方式(while循环)实现类似于加锁的效果.
挂起等待锁:重量级锁的一种实现.通过内核态,借助系统提供的锁机制,当出现锁冲突的时候,会牵扯到内核对于线程的调度,使冲突的线程出现挂起(阻塞等待).
4.读写锁和互斥锁
读写锁:把读操作和写操作的加锁分开了,两个线程读,不会产生锁竞争,两个线程写或者一个读一个写会产生锁竞争.
互斥锁:产生锁竞争.
5.公平锁和非公平锁
公平锁:先来后到.
非公平锁:随机获取,抢占.
6.可从入锁和不可从入锁
可从入锁:同一个线程对同一个对象连续加锁两次,不会出现矛盾.
不可从入锁:同一个线程对同一个对象连续加锁两次,会出现矛盾.