併發工具類之 Exchanger

2021-10-13 10:04:00 字數 783 閱讀 3911

exchanger (交換者) 是乙個用於執行緒間協作的工具類。

exchanger 用於進行執行緒間的資料交換。

兩個執行緒通過exchange()方法交換資料,第乙個執行緒執行到exchange()方法後會一直等待第二個執行緒也執行exchange()方法,當兩個執行緒都到達同步點後,這兩個執行緒就可以交換資料。測試**如下:

public

class

testexchanger

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+" "

+ s);}

,"t1").

start()

;new

thread((

)->

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+" "

+ s);}

,"t2").

start()

;}}

控制台輸出如下:

t2 t1

t1 t2

併發工具類 Exchanger

exchanger是特別容易理解的乙個工具類,它可以在兩個執行緒之間交換資料,只能是2個執行緒,他不支援更多的執行緒之間互換資料。當執行緒1呼叫exchange物件的exchange 方法後,他會陷入阻塞狀態,直到執行緒2也呼叫了exchange 方法,然後以執行緒安全的方式交換資料,之後執行緒a和...

Java併發之Exchanger(交換者)

exchanger是乙個執行緒間提供資料交換功能的寫作工具,他提供了乙個同步點,在這個同步點,兩個執行緒可以交換彼此的資料。執行緒間通過呼叫excahange 方法交換資料,如果第乙個執行緒先到達同步點,執行exchange方法,那麼他會一直在同步點等待第二個執行緒到達同步點,第二個執行緒也執行ex...

併發工具原始碼系列 Exchanger 原始碼解析

exchanger 執行緒之間可以進行元素交換 了解就行了 但是如果多個執行緒都來交換了,那乙個 node 效率太低,所以就提供了個 node 陣列叫 arena 讓執行緒們當作場地來交換。那麼現在交換的話就要在迴圈中進行了,因為槽位多了,就有很多時候沒有交換物件或者被別的執行緒搶走了。屬性 sun...