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