Java高并發(fā)中的交換器Exchanger解析
1.Exchanger簡介
Exchanger — 交換器,是JDK1.5時引入的一個同步器,從字面上就可以看出,這個類的主要作用是交換數(shù)據(jù)。
如果兩個線程并行處理,但在某個時刻需要互相交換自己已經(jīng)處理完的中間數(shù)據(jù),然后才能繼續(xù)往下執(zhí)行。這個時候就可以使用 Exchanger。

Thread1線程到達柵欄后,會首先觀察有沒其它線程已經(jīng)到達柵欄,如果沒有就會等待,如果已經(jīng)有其它線程(Thread2)已經(jīng)到達了,就會以成對的方式交換各自攜帶的信息,因此Exchanger非常適合用于兩個線程之間的數(shù)據(jù)交換。
2.Exchanger的使用
2.1 常用方法
//實現(xiàn)數(shù)據(jù)交換,x是交換的數(shù)據(jù),V是返回對方線程傳遞的數(shù)據(jù) public V exchange(V x) throws InterruptedException ? //用于交換,啟動交換并等待另一個線程調(diào)用exchange,并且設(shè)置最大等待時間,當?shù)却龝r間超過timeout便停止等待。 public V exchange(V x, long timeout, TimeUnit unit)
2.2 使用舉例
//數(shù)據(jù)交換器,用于數(shù)據(jù)交換
Exchanger<String> exchanger = new Exchanger<>();
?
//換書線程1
new Thread(()->{
String[] books_A = new String[]{"C++","操作系統(tǒng)"};//圖書數(shù)組
for (String bookNameA:books_A) {
try {
//交換數(shù)據(jù),bookNameA為我的書,exBook_A為我換回來的書
//System.out.println("線程A準備提交《"+bookNameA+"》書籍,等待交換...");
String exBook_A = exchanger.exchange(bookNameA);
System.out.println(Thread.currentThread().getName()+" 用 《"+bookNameA+"》換《"+exBook_A+"》");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
?
},"線程A").start();
?
//換書線程2
new Thread(()->{
String[] books_B = new String[]{"Java攻略","并發(fā)編程"};//圖書數(shù)組
for (String bookNameB:books_B) {
try {
String exBook_B = exchanger.exchange(bookNameB);
System.out.println(Thread.currentThread().getName()+" 用 《"+bookNameB+"》換《"+exBook_B+"》");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"線程B").start();- Exchanger 支持多個線程做數(shù)據(jù)交換;
- 多個線程使用同一個 Exchanger 做數(shù)據(jù)交換時,結(jié)果隨機,只要湊滿一對,就會進行交換。
到此這篇關(guān)于Java高并發(fā)中的交換器Exchanger解析的文章就介紹到這了,更多相關(guān)Java的Exchanger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot接口防抖(防重復提交)的實現(xiàn)方法
SpringBoot接口防抖主要通過前端和后端兩種方式實現(xiàn),前端通過JavaScript控制用戶操作,后端通過攔截器、過濾器等機制控制請求頻率,文中介紹的非常詳細,感興趣的可以了解一下2024-11-11
Spring的BeanUtils.copyProperties屬性復制避坑指南
這篇文章主要介紹了Spring的BeanUtils.copyProperties屬性復制避坑指南,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Java文件操作工具類fileUtil實例【文件增刪改,復制等】
這篇文章主要介紹了Java文件操作工具類fileUtil,結(jié)合實例形式分析了java針對文件進行讀取、增加、刪除、修改、復制等操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-10-10
啟動 Spring 或 Spring Boot 項目需要 T
本文的內(nèi)容是學習關(guān)于Tomcat的基本知識,介紹了Tomcat為什么是一個 Web 應(yīng)用服務(wù)器,為什么是 Servlet 容器,同時總結(jié)了 Tomcat 的一些功能原理,并詳細介紹了 Tomcat 在 Spring 和SpringBoot 項目中的使用原理,本文不涉及安裝和使用說明,感興趣的朋友跟隨小編一起看看吧2025-11-11

