在上節(jié)中解析了AbstractQueuedSynchronizer(AQS)中獨(dú)占模式對同步狀態(tài)獲取和釋放的實(shí)現(xiàn)過程。本節(jié)將會對共享模式的同步狀態(tài)獲取和釋放過程做一個解析。上一節(jié)提到了獨(dú)占模式和共享模式的區(qū)別,最主要的區(qū)別就是在同一時(shí)刻能否有多個線程同時(shí)獲取到同步狀態(tài)。

  1).共享模式同步狀態(tài)的獲取

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

  這個方法同獨(dú)占模式獲取同步狀態(tài)的acquire方法一樣,同樣也是一個模板方法,我們簡要回顧一下獨(dú)占模式下獲取同步狀態(tài)的acquire方法:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

//AbstractQueuedSynchronizer#acquirepublic final void acquire(int arg) {    if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg))    //獲取鎖(tryAcquire)->構(gòu)造節(jié)點(diǎn)(addWaiter)->加入隊(duì)列(addWaiter)->自旋獲取鎖(acquireQueued)
    selfInterrupt();    //中斷當(dāng)前線程}

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

網(wǎng)友評論