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

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

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

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

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

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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