java并发工具之Exchanger

一.介绍

Exchanger(交换者),是用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。

二.使用

public class ExchangerTest {

    public static Exchanger<String> exchanger  = new Exchanger<>();
    public static void main(String[] args) {





        new Thread(()->{

            try {
                exchanger.exchange("1");
                System.out.println(Thread.currentThread().getName());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"t1").start();
        new Thread(()->{

            try {
                TimeUnit.SECONDS.sleep(1);
                System.out.println(exchanger.exchange("2"));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"t2").start();

    }
}

结果:

// 延时1s 打印出1,可以看出t1线程在exchange方法处hang住了,
//直到t2调用了exchange方法才继续往下运行
1
t1

猜你喜欢

转载自blog.csdn.net/yuanshangshenghuo/article/details/98999626