前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】Java并发编程系列25 | 交换器Exchanger

【原创】Java并发编程系列25 | 交换器Exchanger

作者头像
java进阶架构师
发布2020-07-03 14:04:45
2800
发布2020-07-03 14:04:45
举报
文章被收录于专栏:Java进阶架构师Java进阶架构师

正文

很尴尬,发了并发编程的26和27,漏了本篇25。这下子我是真的没存货了哈哈。那下面我们来补上25先,25比较短小...勿喷。

Exchanger是一个用于线程间协作的工具类,用于两个线程间交换。本篇只介绍Exchanger的使用,不讲解源码。(因Exchanger类的源码很是复杂,而且对平时开发设计借鉴意义也不是很大,所以本人至今没有彻底研究明白,也就不在这里误导大家了。)

Exchanger提供了一个交换的同步点,在这个同步点两个线程能够交换数据。

具体交换数据是通过exchange()方法来实现的,如果一个线程先执行exchange方法,那么它会同步等待另一个线程也执行exchange方法,这个时候两个线程就都达到了同步点,两个线程就可以交换数据。

用一个简单的例子来看下Exchanger的具体使用。两方做交易,如果一方先到要等另一方也到了才能交易,交易就是执行exchange方法交换数据。

代码语言:javascript
复制
public class ExchangerTest {
    private static Exchanger<String> exchanger = new Exchanger<String>();
    static String goods = "电脑";
    static String money = "$1000";

    public static void main(String[] args) throws InterruptedException {
        System.out.println("准备交易,一手交钱一手交货...");
        // 卖家
        new Thread() {
            public void run() {
                System.out.println(getName() + " 卖家到了,已经准备好货:" + goods);
                try {
                    String money = exchanger.exchange(goods);
                    System.out.println(getName() + " 卖家收到钱:" + money);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
        }.start();
        Thread.sleep(3000);
        // 买家
        new Thread() {
            public void run() {
                try {
                    System.out.println(getName() + " 买家到了,已经准备好钱:" + money);
                    String goods = exchanger.exchange(money);
                    System.out.println(getName() + " 买家收到货:" + goods);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
        }.start();
    }
}

输出结果:

代码语言:javascript
复制
准备交易,一手交钱一手交货...
Thread-0 卖家到了,已经准备好货:电脑
Thread-1 买家到了,已经准备好钱:$1000
Thread-1 买家收到货:电脑
Thread-0 卖家收到钱:$1000

参考资料

  1. 《Java并发编程之美》
  2. 《Java并发编程实战》
  3. 《Java并发编程的艺术》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java进阶架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档