共享模式acquire實現(xiàn)流程
上文我們講解了AbstractQueuedSynchronizer獨占模式的acquire實現(xiàn)流程,本文趁熱打鐵繼續(xù)看一下AbstractQueuedSynchronizer共享模式acquire的實現(xiàn)流程。連續(xù)兩篇文章的學(xué)習(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)為:
1 private void doAcquireShared(int arg) { 2 final Node node = addWaiter(Node.SHARED); 3 boolean failed = true; 4 try { 5 boolean&nbs