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? 程序代碼