Exchanger 交换器

Exchanger 交换器_第1张图片

//Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。
//当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,
//然后以线程安全的方式交换数据,之后线程A和B继续运行
package com.lzs.concurrent;

import java.util.concurrent.Exchanger;

/**
 * Created by zaish on 2016-4-4.
 */
public class TestExchanger {
    public static void main(String[] args) {
        Exchanger<String> ec=new Exchanger<String>();
        new A(ec,"A").start();
        new B(ec,"B").start();
    }
}
class A extends Thread{
    private Exchanger<String> ec;
    public A(Exchanger<String> ec,String name){
        this.ec=ec;
        setName(name);
    }

    @Override
    public void run() {
        String str=null;
        try {
            str=ec.exchange(getName()+": hello");
            System.out.println(str);
            str=ec.exchange(getName()+": a");
            System.out.println(str);
            str=ec.exchange(getName()+": b");
            System.out.println(str);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
class B extends Thread{
    private Exchanger<String> ec;
    public B(Exchanger<String> ec,String name){
        this.ec=ec;
        setName(name);
    }

    @Override
    public void run() {
        String str=null;
        try {
            str=ec.exchange(getName()+": hi");
            System.out.println(str);
            str=ec.exchange(getName()+": 1");
            System.out.println(str);
            str=ec.exchange(getName()+": 2");
            System.out.println(str);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


你可能感兴趣的:(Exchanger 交换器)