线程间实现数据交换

想要让两个线程间实现数据交换,可以使用Exchanger类来完成这个需求:

Exchanger类使用demo

public class ExchangerDemo {
    public static void main(String[] args) {
        Exchanger<String> exchanger = new Exchanger<>();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "等待小王");
                try {
                    TimeUnit.SECONDS.sleep(3);
                    String money = exchanger.exchange("快递");
                    System.out.println(Thread.currentThread().getName() + "得到了" + money);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "快递小哥").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "等待快递小哥");
                try {
                    TimeUnit.SECONDS.sleep(3);
                    String delivery = exchanger.exchange("运费");
                    System.out.println(Thread.currentThread().getName() + "得到了" + delivery);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "小王").start();
    }
}

运行结果:

线程间实现数据交换_第1张图片
从运行结果里,可以发现小王拿到了快递小哥的快递,而快递小哥拿到了小王给的运费,小王和快递小哥实现了数据的交换。

总结

如果有两个线程,他们之间需要实现数据的交换,可以尝试着使用下Exchanger类来完成。

你可能感兴趣的:(Java并发编程)