1. 程式人生 > 其它 >執行緒之間資料交換Exchanger

執行緒之間資料交換Exchanger

Exchanger用於執行緒間進行通訊、資料交換。Exchanger提供了一個同步點exchange方法,兩個執行緒呼叫exchange方法時,無論呼叫時間先後,兩個執行緒會互相等到執行緒到達exchange方法呼叫點,此時兩個執行緒可以交換資料,將本執行緒產出資料傳遞給對方。

 

 

程式碼示例:

 1 package com.zte.paas.lcap.application.web;
 2 
 3 import java.util.concurrent.Exchanger;
 4 import java.util.stream.Stream;
 5 
 6 /**
 7  * @Description: TODO
8 * @Author LG 9 * @Date 2022/3/15 10 */ 11 public class MoneyExchanger implements Runnable{ 12 //資料交換器 13 Exchanger<String> exchanger = null; 14 //交換資料的陣列物件 15 String[] moneys = null; 16 17 public MoneyExchanger(Exchanger<String> exchanger, String[] moneys) { 18 this
.exchanger = exchanger; 19 this.moneys = moneys; 20 } 21 22 @Override 23 public void run() { 24 Stream.of(moneys).forEach(money -> { 25 try { 26 //用money換取exMoney 27 String exMoney = this.exchanger.exchange(money); 28 System.out.println(Thread.currentThread().getName() + " 用 " + money + " 換 " + exMoney);
29 } catch (InterruptedException e) { 30 e.printStackTrace(); 31 } 32 }); 33 } 34 35 public static void main(String[] args) { 36 Exchanger<String> exchanger = new Exchanger<>(); 37 MoneyExchanger moneyExchanger = new MoneyExchanger(exchanger,new String[]{"人民幣","盧布"}); 38 MoneyExchanger moneyExchanger2 = new MoneyExchanger(exchanger, new String[]{"美元","日元"}); 39 new Thread(moneyExchanger).start(); 40 new Thread(moneyExchanger2).start(); 41 42 } 43 }
View Code

 

 

執行結果: