java并发Exchanger的使用
文章目錄
- 簡介
- 類定義
- 類繼承
- 構造函數
- 兩個主要方法
- 具體的例子
- 結語
簡介
Exchanger是java 5引入的并發類,Exchanger顧名思義就是用來做交換的。這里主要是兩個線程之間交換持有的對象。當Exchanger在一個線程中調用exchange方法之后,會等待另外的線程調用同樣的exchange方法。
兩個線程都調用exchange方法之后,傳入的參數就會交換。
類定義
public class Exchanger<V>其中V表示需要交換的對象類型。
類繼承
java.lang.Object ? java.util.concurrent.Exchanger<V>Exchanger直接繼承自Object。
構造函數
Exchanger()Exchanger提供一個無參構造函數。
兩個主要方法
當這個方法被調用的時候,當前線程將會等待直到其他的線程調用同樣的方法。當其他的線程調用exchange之后,當前線程將會繼續執行。
在等待過程中,如果有其他的線程interrupt當前線程,則會拋出InterruptedException。
和第一個方法類似,區別是多了一個timeout時間。如果在timeout時間之內沒有其他線程調用exchange方法,則會拋出TimeoutException。
具體的例子
我們先定義一個帶交換的類:
@Data public class CustBook {private String name; }然后定義兩個Runnable,在run方法中調用exchange方法:
@Slf4j public class ExchangerOne implements Runnable{Exchanger<CustBook> ex;ExchangerOne(Exchanger<CustBook> ex){this.ex=ex;}@Overridepublic void run() {CustBook custBook= new CustBook();custBook.setName("book one");try {CustBook exhangeCustBook=ex.exchange(custBook);log.info(exhangeCustBook.getName());} catch (InterruptedException e) {e.printStackTrace();}} } @Slf4j public class ExchangerTwo implements Runnable{Exchanger<CustBook> ex;ExchangerTwo(Exchanger<CustBook> ex){this.ex=ex;}@Overridepublic void run() {CustBook custBook= new CustBook();custBook.setName("book two");try {CustBook exhangeCustBook=ex.exchange(custBook);log.info(exhangeCustBook.getName());} catch (InterruptedException e) {e.printStackTrace();}} }最后在主方法中調用:
public class ExchangerUsage {public static void main(String[] args) {Exchanger<CustBook> exchanger = new Exchanger<>();// Starting two threadsnew Thread(new ExchangerOne(exchanger)).start();new Thread(new ExchangerTwo(exchanger)).start();} }我們看下結果:
22:14:09.069 [Thread-1] INFO com.flydean.ExchangerTwo - book one 22:14:09.073 [Thread-0] INFO com.flydean.ExchangerOne - book two可以看到對象已經被交換了。
結語
Exchanger在兩個線程需要交換對象的時候非常好用。大家可以在實際工作生活中使用。
本文的例子https://github.com/ddean2009/learn-java-concurrency/tree/master/Exchanger
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
歡迎關注我的公眾號:程序那些事,更多精彩等著您!
更多內容請訪問 www.flydean.com
總結
以上是生活随笔為你收集整理的java并发Exchanger的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中functional inte
- 下一篇: Lambda表达式最佳实践