JUC 第7章JUC強(qiáng)大的輔助類講解
第7章?JUC強(qiáng)大的輔助類講解
1.?ReentrantReadWriteLock讀寫鎖
類似軟件:紅蜘蛛
程序代碼:
,
2.?CountDownLatch減少計(jì)數(shù)
? ? 2.1? 原理
CountDownLatch主要有兩個(gè)方法,當(dāng)一個(gè)或多個(gè)線程調(diào)用await方法時(shí),這些線程會(huì)阻塞。
其它線程調(diào)用countDown方法會(huì)將計(jì)數(shù)器減1(調(diào)用countDown方法的線程不會(huì)阻塞),當(dāng)計(jì)數(shù)器的值變?yōu)?時(shí),因await方法阻塞的線程會(huì)被喚醒,繼續(xù)執(zhí)行。
? ? 2.2? 程序代碼
3.?CyclicBarrier循環(huán)柵欄
? ? 3.1? 原理
CyclicBarrier的字面意思是可循環(huán)(Cyclic)使用的屏障(Barrier)。它要做的事情是,讓一組線程到達(dá)一個(gè)屏障(也可以叫同步點(diǎn))時(shí)被阻塞,直到最后一個(gè)線程到達(dá)屏障時(shí),屏障才會(huì)開門,所有被屏障攔截的線程才會(huì)繼續(xù)干活。線程進(jìn)入屏障通過CyclicBarrier的await()方法。
? ?3.1? 程序代碼
4.?Semaphore信號燈
? ? 4.1 原理
在信號量上我們定義兩種操作:
??acquire(獲?。?當(dāng)一個(gè)線程調(diào)用acquire操作時(shí),它要么通過成功獲取信號量(信號量減1),要么一直等下去,直到有線程釋放信號量,或超時(shí)。
?release(釋放)實(shí)際上會(huì)將信號量的值加1,然后喚醒等待的線程。信號量主要用于兩個(gè)目的,一個(gè)是用于多個(gè)共享資源的互斥使用,另一個(gè)用于并發(fā)線程數(shù)的控制。
? ?4.1? 程序代碼