exchanger是特別容易理解的乙個工具類,它可以在兩個執行緒之間交換資料,只能是2個執行緒,他不支援更多的執行緒之間互換資料。
當執行緒1呼叫exchange物件的exchange()方法後,他會陷入阻塞狀態,直到執行緒2也呼叫了exchange()方法,然後以執行緒安全的方式交換資料,之後執行緒a和b繼續執行。
因為其比較簡單,這裡我們就直接看乙個例子吧
public
class
catch
(interruptedexception e)
system.out.
println
("*****===v1*****====");
v1.stream()
.foreach
(system.out:
:println);}
).start()
;new
thread((
)->
catch
(interruptedexception e)
trycatch
(interruptedexception e)
system.out.
println
("*****===v2*****====");
v2.stream()
.foreach
(system.out:
:println);}
).start();}}
我們直接看其執行結果 併發工具類之 Exchanger
exchanger 交換者 是乙個用於執行緒間協作的工具類。exchanger 用於進行執行緒間的資料交換。兩個執行緒通過exchange 方法交換資料,第乙個執行緒執行到exchange 方法後會一直等待第二個執行緒也執行exchange 方法,當兩個執行緒都到達同步點後,這兩個執行緒就可以交換資...
併發工具原始碼系列 Exchanger 原始碼解析
exchanger 執行緒之間可以進行元素交換 了解就行了 但是如果多個執行緒都來交換了,那乙個 node 效率太低,所以就提供了個 node 陣列叫 arena 讓執行緒們當作場地來交換。那麼現在交換的話就要在迴圈中進行了,因為槽位多了,就有很多時候沒有交換物件或者被別的執行緒搶走了。屬性 sun...
java併發程式設計之Exchanger
exchanger v 可以交換的物件型別 可以在對中對元素進行配對和交換的執行緒的同步點。每個執行緒將條目上的某個方法呈現給 exchange 方法,與夥伴執行緒進行匹配,並且在返回時接收其夥伴的物件。exchanger 可能被視為 synchronousqueue 的雙向形式。exchanger...