java併發程式設計 六

2021-09-10 23:36:35 字數 2449 閱讀 3904

併發工具類:

lk最近學習了併發工具類的知識,總結一下它們的用法:

1.countdownlatch

2.cyclicbarrier

3.semaphore

4.exchanger

使用完countdownlatch之後,覺得它適合應用於讓其它執行緒去各自執行完,然後main執行緒開始執行的場合 。

自己理解的原理圖:

具體應用場景:

/**

* 使用場景 主線程等待其它執行緒執行完畢在執行

* * @author yrz

* */

public

class

mycountdownlatch})

.start()

;new

thread

(new

runnable()

}).start()

;try

catch

(interruptedexception e)

}}

當我們呼叫一次countdownlatch的countdown方法時,n就會減1,countdownlatch的await會阻塞當前執行緒,直到n變成零。

n為阻塞的執行緒數(本例中指 2)

簡介:cyclicbarrier 的字面意思是可迴圈使用(cyclic)的屏障(barrier)。它要做的事情是,讓一組執行緒到達乙個屏障(也可以叫同步點)時被阻塞,直到最後乙個執行緒到達屏障時,屏障才會開門,所有被屏障攔截的執行緒才會繼續幹活==。cyclicbarrier預設的構造方法是cyclicbarrier(int parties),其引數表示屏障攔截的執行緒數量,每個執行緒呼叫await方法告訴cyclicbarrier我已經到達了屏障,然後當前執行緒被阻塞。

總結:所有執行緒到達屏障後,才會繼續幹活

自己理解的原理圖:

應用場景:等待參會成員到會後,開始開會

/**

* 同步屏障cyclicbarrier

* @author yrz

* */

public

class

mycyclicbarrier

catch

(exception e)

}public

static

void

main

(string[

] args)})

;for

(int i =

0; i <

5; i++)}

).start()

;;}}

}

cyclicbarrier的await方法會阻塞到達屏障的執行緒,當最後乙個執行緒到達後,執行barrieraction。

訊號量作用:控制併發執行緒,自己理解的原理圖

* 控制併發執行緒數semaphore

* @author yrz

* */

public

class

mysemaphore

catch

(exception e)}}

);} executorservice.

shutdown();}}

訊號量像乙個水閘,semaphor的建構函式預設限制值,這個值就像水閘的寬度一樣,限制允許通過的水流量(也就是執行緒數量)。semaphore.acquire()方法獲取許可,semaphore.release()方法釋放許可。

exchanger 兩個執行緒進行資料交換,主要是使用exchanger.exchange()方法,比較兩個執行緒的值是否相等。自己理解的原理圖:

* 兩個執行緒進行資料交換的exchanger

* * @author yrz

* */

public

class

myexchanger

catch

(interruptedexception e)}}

);executorservice.

execute

(new

runnable()

}catch

(interruptedexception e)}}

);}}

java併發程式設計的藝術(六) AQS

aqs是佇列同步器 abstractqueuesynchronizer 是用來構建鎖和完成其他同步元件的基本框架,再lock裡面,很多的方法都將用到aqs以獲取同步狀態,實現鎖的語義,而不是依靠傳統的synchronized中的物件進行鎖獲取與釋放。aqs的核心思想是基於volatile int s...

JAVA併發程式設計

通過常量字串 string 來呼叫 wait 或 notify 方法所導致的問題是,jvm 編譯器會在內部自動將內容相同的 string 轉變為相同的物件。這意味著,即便你建立了兩個不同的 mywaitnotify 例項,他們內部的 mymonitorobject 變數也會指向相同的 string ...

Java併發程式設計

執行緒之間通訊 1.加鎖 object.wait 釋放鎖 object.notify 與sychronized 聯合使用,object lock new object sychronized lock sychronized lock 2.改進 無需加鎖並發包下 countdownlatch.awa...