在上节中解析了AbstractQueuedSynchronizer(AQS)中独占模式对同步状态获取和释放的实现过程。本节将会对共享模式的同步状态获取和释放过程做一个解析。上一节提到了独占模式和共享模式的区别,最主要的区别就是在同一时刻能否有多个线程同时获取到同步状态。

  1).共享模式同步状态的获取

iOS培训,Swift培训,苹果开发培训,移动开发培训

  这个方法同独占模式获取同步状态的acquire方法一样,同样也是一个模板方法,我们简要回顾一下独占模式下获取同步状态的acquire方法:

iOS培训,Swift培训,苹果开发培训,移动开发培训

//AbstractQueuedSynchronizer#acquirepublic final void acquire(int arg) {    if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg))    //获取锁(tryAcquire)->构造节点(addWaiter)->加入队列(addWaiter)->自旋获取锁(acquireQueued)
    selfInterrupt();    //中断当前线程}

iOS培训,Swift培训,苹果开发培训,移动开发培训

网友评论