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