共享模式acquire實現(xiàn)流程

上文我們講解了AbstractQueuedSynchronizer獨占模式的acquire實現(xiàn)流程,本文趁熱打鐵繼續(xù)看一下AbstractQueuedSynchronizer共享模式acquire的實現(xiàn)流程。連續(xù)兩篇文章的學習,也可以對比獨占模式acquire和共享模式acquire的區(qū)別,加深對于AbstractQueuedSynchronizer的理解。

先看一下共享模式acquire的實現(xiàn),方法為acquireShared和acquireSharedInterruptibly,兩者差別不大,區(qū)別就在于后者有中斷處理,以acquireShared為例:

 1 public final void acquireShared(int arg) { 2     if (tryAcquireShared(arg) < 0) 3         doAcquireShared(arg); 4 }

這里就能看出第一個差別來了:獨占模式acquire的時候子類重寫的方法tryAcquire返回的是boolean,即是否tryAcquire成功;共享模式acquire的時候,返回的是一個int型變量,判斷是否<0。doAcquireShared方法的實現(xiàn)為:

大數據培訓,云培訓,數據挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經理培訓

 1 private void doAcquireShared(int arg) { 2     final Node node = addWaiter(Node.SHARED); 3     boolean failed = true; 4     try { 5         boolean&nbs