公平锁/非公平锁

公平锁是指多线程按照申请锁的顺序来获取锁,非公平锁指多个线程获取锁的顺序不是按照申请锁的顺序,有可能造成优先级反转或者饥饿现象,
非公平锁的优点在于吞吐量比公平锁大,ReentrantLock默认非公平锁,可通过构造函数选择公平锁,Synchronized是非公平锁。

可重入锁

可重入锁指在一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁,ReentrantLock与Synchronized都是可重入的。

独享锁/共享锁

独享锁是指一个锁只能一个线程独有,共享锁指一个锁可被多个线程共享,对于ReadWriteLock,读锁是共享锁,写锁是独享所。

互斥锁/读写锁

独享锁/共享锁是一种广义的说法,互斥锁/读写锁是其具体实现。

乐观锁/悲观锁

乐观锁与悲观锁是看待同步的角度不同,乐观锁认为对于同一个数据的修改操作,是不会有竞争的,会尝试更新,如果失败,不断重试。
悲观锁与此相反,直接获取锁,之后再操作,最后释放锁。

分段锁

分段锁是一种设计思想,通过将一个整体分割成小块,在每个小块上加锁,提高并发。

偏向锁/轻量级锁/重量级锁

这三种为锁的状态,是JVM对于Synchronized的优化,偏向锁是指同一段代码一直被同一个线程访问,那么这个线程会自动获取锁,降低获取锁的代价。
轻量级锁指在偏向锁的时候,被另一个线程访问,通过CAS尝试获取锁。
重量级锁就是在轻量级锁的前提下,其中一个线程自旋次数过多,但是锁还没获取到,就膨胀为重量级锁。

自旋锁

典型的CAS思想,不会立即阻塞,会不断重试获取锁,减少了线程上下文切换,但是增加了CPU消耗。