java并发编程-Exchanger

Exchanger
作用:两个线程之间可以传输数据,exchange()方法具有阻塞特色,此方法调用后,等待其他线程来取得数据,如果没有其他线程取得数据,则一直阻塞等待,exchange(V x, long timeout, TimeUnit unit) 设置超时时间
测试代码:
public class TestThreadA extends Thread{
    private Exchanger exchanger;
    public TestThreadA(Exchanger exchanger){
        this.exchanger = exchanger;
    }
    @Override
    public void run() {
        try{
            System.out.println("线程A获取线程的值:"+exchanger.exchange("这是线程A",2, TimeUnit.SECONDS));
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (TimeoutException e){
            e.printStackTrace();
        }
    }
}

public class TestThreadB extends Thread {
    private Exchanger exchanger;

    public TestThreadB(Exchanger exchanger){
        this.exchanger = exchanger;
    }

    @Override
    public void run() {
       try {
           //Thread.sleep(3000);
           System.out.println("线程B获取线程A的值:"+exchanger.exchange("这是线程B"));
       }catch (InterruptedException e){
           e.printStackTrace();
       }
    }
}

public class MyTest {
    public static void main(String[] args) {
        Exchanger exchanger = new Exchanger<>();
        TestThreadA testThreadA = new TestThreadA(exchanger);
        TestThreadB testThreadB = new TestThreadB(exchanger);
        testThreadA.start();
        testThreadB.start();
    }
}

测试结果:
线程A获取线程的值:这是线程B
线程B获取线程A的值:这是线程A
 

你可能感兴趣的:(java)