多线程之Exchanger-线程间共享信息

package com.example.test.async;

import lombok.Getter;

import java.util.concurrent.Exchanger;

/**
 * 小红和小明是好朋友
 * 小红想知道小明的小秘密
 * 小明也想知道小红的小秘密
 * 于是他们打算互相交换自己的小秘密
 */
public class ExchangerTest {
    private static final Exchanger<String> EXCHANGER = new Exchanger<>();

    public static void main(String[] args) {
        new ExchangerTask("小红", EXCHANGER, "小强竟然会怕毛毛虫🐛").start();
        new ExchangerTask("小明", EXCHANGER, "小刚竟然会怕青蛙🐸").start();
    }
}

@Getter
class ExchangerTask extends Thread {
    private String secret;
    private Exchanger<String> exchanger;

    public ExchangerTask(String name, Exchanger<String> exchanger, String secret) {
        this.secret = secret;
        this.exchanger = exchanger;
        this.setName(name);
        System.out.println(name + "的秘密是:" + secret);
    }

    @Override
    public void run() {
        try {
            String exchange = exchanger.exchange(this.secret);
            System.out.println(this.getName() + "-交换得到的秘密是:" + exchange);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

结果

posted @ 2022-08-01 10:37  我自逍遥  阅读(34)  评论(0)    收藏  举报