共享模式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í)候子類(lèi)重寫(xiě)的方法tryAcquire返回的是boolean,即是否tryAcquire成功;共享模式acquire的時(shí)候,返回的是一個(gè)int型變量,判斷是否<0。doAcquireShared方法的實(shí)現(xiàn)為:
1 private void doAcquireShared(int arg) { 2 final Node node = addWaiter(Node.SHARED); 3 boolean failed = true; 4 try { 5 boolean&nbs