线程间数据交换 - Exchanger

什么是Exchanger?

线程间协作的一个工具类,简单点说就是两个线程之间交换数据,两个线程之间通过exchanger方法交换数据,当第一个线程执行了exchanger方法后,会一直等待第二个线程执行exchanger,当第二个线程也执行了exchanger方法(两个线程都到达交换点),两个线程就可以传递数据,将本线程产生的数据传输给对方。

构造

Exchanger() 创建一个数据交换机

Exchanger方法

类型 方法 描述
V exchange(V x) 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传输给它,然后接收它的对象作为返回
V exchange(V x, long timeout, TimeUnit unit) 等待另一个线程到达此交换点(除非当前线程被中断或指定的等待时间已过),然后将给定对象传输给它,并接收其对象作为返回

例子

package com.sy.thread.example;

import java.util.concurrent.Exchanger;

/**
 * Description: thread
 *
 * @author songyu
 */
public class ExchangerTest {
    //声明一个交换机,交换类型是String类型
    static Exchanger<String> exchanger = new Exchanger<String>();

    public static void main(String[] args) {
        new Thread(()->{
            String exchangerContent = "您好,我是线程1";
            try{
                //阻塞,等待第二个线程到的交换点
                exchangerContent = exchanger.exchange(exchangerContent);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "接收到的内容:" + exchangerContent);
        },"线程一").start();

        new Thread(()->{
            String exchangerContent = "你好,我是线程2";
            try{
                exchangerContent = exchanger.exchange(exchangerContent);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "接收到的内容:" + exchangerContent);
        },"线程二").start();
    }
}


执行结果

线程二接收到的内容:您好,我是线程1
线程一接收到的内容:你好,我是线程2

通过运行结果可以看到各自线程内定义的内容已经实现了在两个线程之间交换。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容