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 }
执行结果:

浙公网安备 33010602011771号