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!

推薦閱讀: