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

 

 

执行结果:

posted on 2022-03-15 10:26  东北与江南  阅读(98)  评论(0)    收藏  举报