锁大概有以下名词:
自旋锁、自旋锁的其他种类、阻塞锁、可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、偏向锁、对象锁、线程锁、锁粗化、锁消除、轻量级锁、重量级锁、信号量、独享锁、共享锁、分段锁。
我们所说锁的分类其实应该按照锁的特性和设计来划分。
其实从并发的角度来讲,按照线程安全的三种策略看,主要内容都集中在互斥同步里,我们所讨论的锁也集中在这个部分,这个部分的锁都是悲观锁;第二个部分是非阻塞同步,这个部分也就一种通过CAS进行原子类操作,这个部分可以看成乐观锁,其实也就是不加锁;第三个部分是无同步方案,包括可重入代码和线程本地存储。
常见的锁Synchronized和Lock。
其实我们真正用到的锁也就那么两三种,只不过依据设计方案和性质对其进行了大量的划分。
- Sychronized语义上的实现:它就是一个非公平、悲观、独享、互斥、可重入的重量级锁。
以下两个锁都在JUC包下,是API层面上的实现: - ReentrantLock:它是一个默认非公平但可实现公平的、悲观、独享、互斥、可重入、重量级锁。
- ReentrantReadWriteLock:它是一个默认非公平但是可实现公平的、悲观、写独享、读共享、读写、可重入、重量级锁。
java锁的种类
Java 中15种锁的介绍



