===== 多个线程竞争一个资源时步骤如下 =====
- 任意一个时刻只有一个人获取资源
- 其他人进入等待队列
- 获取资源的人释放资源后,通知其他人自己已经释放了。
- 队列中任意一个人可能被唤醒并获取锁。
=== synchronized实现(c++层实现) ===
- 监控一个代码块的入口和出口(monitorenter/monitorexit)。
- 第一个线程可以顺利进入执行代码
- 第二个,第三个线程…变成挂起状态,进入等待队列
- 第一个线程执行完毕,通知等待队列中的线程:你们中可以选一个区执行啦….
=== java.util.concurrent.locks实现(java层实现) ===
过程和上面类此。实现类在 AbstractQueuedSynchronizer 中。
java.util.concurrent 中的数据结构是CAS的机制实现。见 [[并发更新之cas]]