Exchanger 简单了解

文字摘要于:https://yq.aliyun.com/articles/632589
Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也 执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。所以由此可见,Exchanger将会与 生产者-消费者模型相关。

其应用场景有:Exchanger可以用于遗传算法,遗传算法里需要选出两个人作为交配对象,这时候会交换 两人的数据,并使用交叉规则得出2个交配结果。Exchanger也可以用于校对工作,比如我们需 要将纸制银行流水通过人工的方式录入成电子银行流水,为了避免错误,采用AB岗两人进行 录入,录入到Excel之后,系统需要加载这两个Excel,并对两个Excel数据进行校对,看看是否录入一致。如果两个线程有一个没有执行exchange()方法,则会一直等待,如果担心有特殊情况发 生,避免一直等待,可以使用exchange(V x,longtimeout,TimeUnit unit)设置最大等待时长。

使用

 public static void main(String[] args) {

        Exchanger<Object> exchanger = new Exchanger<>();

        new Thread(()-> {
            Object o = new Object();
            System.out.println("object 原先的地址 " + o.hashCode());
            try {
                Object exchange = exchanger.exchange(o);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();


        new Thread(()-> {
            Object o = new Object();

            try {
                Object exchange = exchanger.exchange(o);
                System.out.println("object 原先的地址 " + exchange.hashCode());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }

测试发现,传入和返回的地址是相同的,所以当我们使用的时候需要注意,如果删减对象会导致接收者数据也会改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当深入准备 RabbitMQ 面试时,你可以关注以下主题: 1. RabbitMQ 的基本概念:了解 RabbitMQ 的核心概念,例如消息队列、消息、生产者、消费者、交换机、队列等。理解它们之间的关系和消息传递的流程。 2. RabbitMQ 的优点和使用场景:掌握 RabbitMQ 的优点,例如可靠性、灵活性、可扩展性和高可用性。了解 RabbitMQ 在哪些情况下适用,例如异步通信、任务调度、日志处理等。 3. AMQP 协议:了解 AMQP(Advanced Message Queuing Protocol)协议,它是 RabbitMQ 使用的通信协议。了解其基本原理和消息传递模型。 4. Exchange 和 Queue:深入了解 RabbitMQ 中的交换机和队列。了解不同类型的交换机(直连、主题、扇形、头部)以及它们的特点和使用场景。了解如何声明和绑定队列,并掌握队列的属性和参数。 5. 消费者和消费模式:掌握如何编写 RabbitMQ 的消费者代码。了解 RabbitMQ 中的消费模式,例如简单模式、工作模式、订阅模式、路由模式等。了解如何处理消费者的并发和故障恢复。 6. 消息确认和持久化:了解 RabbitMQ 中的消息确认机制,包括手动确认和自动确认。了解如何确保消息的可靠性传递。掌握消息的持久化,即消息在 RabbitMQ 重启后仍然可用。 7. 集群和高可用性:了解 RabbitMQ 集群的概念和配置。了解如何配置主从同步,以提高 RabbitMQ 的可用性和容错性。 8. 调试和监控:了解 RabbitMQ 的调试技巧和常见问题的解决方法。了解如何监控 RabbitMQ 的性能指标和队列状态。 除了以上内容,还可以深入了解 RabbitMQ 的插件、安全性、性能优化和与其他系统集成等相关主题。准备这些内容将有助于你在 RabbitMQ 面试中展示你的深度理解和丰富经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值