併發工具類 Exchanger

2021-09-27 03:18:07 字數 758 閱讀 4998

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