AQS定義兩種資源共享方式:
1. Exclusive(獨(dú)占):只有一個線程能執(zhí)行,如ReentrantLock。又可分為公平鎖和非公平鎖:
公平鎖:按照線程在隊(duì)列中的排隊(duì)順序,先到者先拿到鎖
非公平鎖:當(dāng)線程要獲取鎖時,無視隊(duì)列順序直接去搶鎖,誰搶到就是誰的
2. Share(共享):多個線程可同時執(zhí)行,如Semaphore/CountDownLatch。Semaphore、CountDownLatch、 CyclicBarrier、ReadWriteLock 我們都會在后面講到。
ReentrantReadWriteLock可以看成是組合式,因?yàn)镽eentrantReadWriteLock也就是讀寫鎖允許多個線程同時對某一資源進(jìn)行讀。不同的自定義同步器爭用共享資源的方式也不同。自定義同步器在實(shí)現(xiàn)時只需要實(shí)現(xiàn)共享資源state的獲取與釋放方式即可,至于具體線程等待隊(duì)列的維護(hù)(如獲取資源失敗入隊(duì)/喚醒出隊(duì)等),AQS已經(jīng)在頂層實(shí)現(xiàn)好了。