锁的种类划分:
公平锁/非公平锁,线程获取锁是否有顺序
可重入锁,获得锁的线程可以重复加锁从某些程度上避免了死锁的产生
独享锁/共享锁,当线程获得锁时其他线程是否能操作锁住的资源区域。eg:Synchronizer和ReentrantLock就是独享锁,ReadWriteLock的读是共享锁,写是独享锁!
乐观锁/悲观锁,上锁--》临界区--》执行(悲观,认为每一次操作都会有其他线程来抢夺资源) 尝试获取资源--》进入临界区--》执行(思想跟悲观相反,典型的例子就是CAS自旋)
分段锁,典型的JAVA实现类就是JDK1.7的ConcurrentHashMap中的Segment[]就是一种分段锁
偏向锁/轻量级锁/重量级锁:
偏向锁,线程1--》记录1--》进入临界区(可以反复进入无须获得锁,此时线程2要进入时则须重新记录)
轻量级锁,线程1--》进入临界区(此时线程2进入则须自旋)
重量级锁,我们熟知的lock、Synchronizer等
自旋锁,eg:循环CAS