2.3 Exchanger的理解和使用

 快速理解:一个线程在执行exchange(set)之后,会等待另一个线程执行exchange(set),然后两个线程继续往下执行

图解

 示例代码:交换数据

public class UseExchange {
    private static final Exchanger<Set<String>> exchange = new Exchanger<Set<String>>();

    public static void main(String[] args) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                Set<String> setA = new HashSet<String>();//存放数据的容器
                try {
                    Thread.currentThread().setName("setA:");
                    System.out.println("setA原来是:a,b,c,d");
                    //添加数据
                    setA.add("a");
                    setA.add("b");
                    setA.add("c");
                    setA.add("d");
                    Thread.sleep(1000);
                    setA = exchange.exchange(setA);//交换set

                    System.out.println("交换之后" + Thread.currentThread().getName() + setA.toString());

                    /*处理交换后的数据*/
                } catch (InterruptedException e) {
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                Set<String> setB = new HashSet<String>();//存放数据的容器
                Thread.currentThread().setName("setB:");
                System.out.println("setB原来是:1,2,3,4");
                try {
                    //添加数据
                    setB.add("1");
                    setB.add("2");
                    setB.add("3");
                    setB.add("4");
                    setB = exchange.exchange(setB);//交换set
                    System.out.println("交换之后" + Thread.currentThread().getName() + setB.toString());
                    /*处理交换后的数据*/
                } catch (InterruptedException e) {
                }
            }
        }).start();
    }
}

执行结果:

setA原来是:a,b,c,d
setB原来是:1,2,3,4
交换之后setA:[1, 2, 3, 4]
交换之后setB:[a, b, c, d]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值