- 主题:我在年轻的时候也尝试过学习开锁,什么独占锁/共享锁/乐观锁/悲
我在年轻的时候也尝试过学习开锁,
什么独占锁/共享锁/
乐观锁/悲观锁/
偏向锁/自旋锁/轻量锁/重量锁/
公平锁/非公平锁/
互斥锁/信号锁/读写锁
表级锁/行级锁
分布式锁
……
synchronised 是 JVM 层面的;
Lock/ReadWriteLock/Semaphore 是 JDK 层面的;
==
synchronised 是用 C++ 的 objectMonitor 类实现的
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/69087d08d473/src/share/vm/runtime/objectMonitor.hpp
synchronised 是用 objectMonitor 实现的
objectMonitor 是用 pthread_mutex 实现的
synchronised 相当于是一个 Mutex
也有人说synchronised的实现是一个从偏向锁/轻量锁/自旋锁(CAS)/重量锁(Mutex)逐步升级的过程。
CAS是乐观锁(没有锁)、Mutex是悲观锁
我们通常说的锁Lock 默认是指Mutex互斥锁。
==
Lock/ReadWriteLock/Semaphore 都是接口
ReentrantLock 是 Lock 的实现类
ReentrantReadWriteLock 是 ReadWriteLock 的实现类
Lock/ReadWriteLock/Semaphore三者,系统中只需自带其中任意一个,就可以实现另外两个。
Lock其实也是Mutex
Lock/ReadWriteLock/Semaphore 都是用 AQS 框架实现的
AQS框架用到了CAS机制
CAS机制用到了CPU的cmpxchg指令
乐观锁的实现有CAS机制和版本号机制
AtomicInteger类是使用了CAS机制
AtomicStampedReference类是使用了版本号机制
==
有人将 Lock(Mutex)归为为独占锁 将Semaphore归为共享锁
ReadWriteLock写时独占,读时共享。
但是Mutex在字面意思上本来就是独占的意思。
Mutex是独占、排他、非此即彼、二中取一的意思
--
修改:PlutoKey FROM 223.104.68.*
FROM 223.104.68.*
不如去公安局备案学点真本事
--
FROM 223.104.44.*
这个好像是个精华帖
【 在 PlutoKey 的大作中提到: 】
: 我在年轻的时候也尝试过学习开锁,
: 什么独占锁/共享锁/
: 乐观锁/悲观锁/
: ...................
--
FROM 220.188.179.*