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...