Java並發工具類Exchanger的相關知識總結
一、Exchanger的理解
- Exchanger 屬於java.util.concurrent包;
- Exchanger 是 JDK 1.5 開始提供的一個用於兩個工作線程之間交換數據的封裝工具類;
- 一個線程在完成一定的事務後想與另一個線程交換數據,則第一個先拿出數據的線程會一直等待第二個線程,直到第二個線程拿著數據到來時才能彼此交換對應數據。
二、Exchanger類中常用方法
- public Exchanger() 無參構造方法。表示創建一個新的交換器。
- public V exchange(V x) 等待另一個線程到達此交換點(除非當前線程為 interrupted ),然後將給定對象傳輸給它,接收其對象作為回報。
(1)、x :表示可以交換的對象
- public V exchange(V x, long timeout, TimeUnit unit) 等待另一個線程到達此交換點(除非當前線程為 interrupted或指定的等待時間已過),然後將給定對象傳輸給它,接收其對象作為回報。
(1)、 x :交換對象
(2)、timeout :等待的最長時間
(3)、unit :timeout參數的時間單位
三、Exchanger類的使用示例
案例場景
模擬客戶端和服務端交換數據。
1、代碼
package com.xz.thread.Exchanger; import java.util.concurrent.Exchanger; /** * @description: * @author: xz * @create: 2021-05-31 21:56 */ public class Demo { //定義一個服務端方法 public void serverMethod(Exchanger<String> exchanger){ System.out.println("【服務端】方法開始執行"); //睡眠1秒鐘 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //定義服務端數據 String data="serverData"; //等待另一個線程到達此交換點(除非當前線程為interrupted),然後將給定對象傳輸給它,接收其對象作為回報。 String exchangeData=""; try { exchangeData=exchanger.exchange(data); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("服務端原數據="+"serverData,"+" 交換後的數據=" + exchangeData); } //定義一個客戶端方法 public void clientMethod(Exchanger<String> exchanger){ System.out.println("【客戶端】方法開始執行"); //睡眠3秒鐘 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //定義客戶端數據 String data="clientData"; //等待另一個線程到達此交換點(除非當前線程為interrupted),然後將給定對象傳輸給它,接收其對象作為回報。 String exchangeData=""; try{ exchangeData =exchanger.exchange(data); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("客戶端原數據="+"clientData, "+"交換後的數據=" + exchangeData); } //測試類 public static void main(String[] args) { Demo d =new Demo(); //實例化Exchanger Exchanger<String> exchanger =new Exchanger(); //第一個線程 new Thread(new Runnable() { @Override public void run() { d.serverMethod(exchanger); } }).start(); //第二個線程 new Thread(new Runnable() { @Override public void run() { d.clientMethod(exchanger); } }).start(); } }
2、運行main函數,輸出結果如下:
到此這篇關於Java並發工具類Exchanger的相關知識總結的文章就介紹到這瞭,更多相關Java工具類Exchanger內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java利用 Exchanger 實現遊戲中交換裝備
- Java並發編程之代碼實現兩玩傢交換裝備
- 一篇文章掌握Java Thread的類及其常見方法
- 新手瞭解java 多線程基礎知識
- Java多線程Thread類的使用及註意事項