【Java设计模式】扇出扇入模式

Java扇出扇入设计模式详解

【Java设计模式】扇出扇入模式

一、概述

Java中的扇出扇入设计模式旨在通过将一个任务划分为多个可以并行处理的子任务(扇出),然后将这些子任务的结果合并为一个单一的结果(扇入),来提高并发性和优化处理时间。

二、别名

  • 分散收集

三、扇出扇入设计模式的意图

扇出扇入设计模式的目的是在Java中通过并行处理多个子任务并合并结果,来提高并发性能和优化处理效率。

四、通过实际示例详细解释扇出扇入模式

实际示例:

Java中扇出扇入模式的一个现实世界例子是像UberEats或DoorDash这样的食品配送服务。当顾客下单时,服务(扇出)向不同的餐厅发送单独的任务来准备各种菜品。每个餐厅独立工作来准备订单的一部分。一旦所有餐厅完成任务,配送服务(扇入)将来自不同餐厅的菜品聚合为一个订单,确保所有东西一起交付给顾客。这种并行处理提高了效率并确保及时交付。
通俗解释:
扇出扇入模式将任务分布在多个并发进程或线程中,然后聚合结果。
维基百科说:
在面向消息的中间件中,扇出模式通过并行将消息传递到一个或多个目的地,而不等待响应,来模拟信息交换。这允许一个进程同时将任务分配给各种接收器。

另一方面,扇入概念通常指的是多个输入的聚合。在数字电子学中,它描述了一个逻辑门可以处理的输入数量。结合这些概念,软件工程中的扇出扇入模式涉及分发任务(扇出),然后聚合结果(扇入)。

五、Java中扇出扇入模式的编程示例

所提供的实现涉及一个数字列表,目标是对它们进行平方并聚合结果。FanOutFanIn类接收数字列表作为SquareNumberRequest对象和一个Consumer实例,该实例在请求完成时收集平方后的结果。每个SquareNumberRequest以随机延迟对其数字进行平方,并在平方后调用ConsumerConsumer实例在不同时间从各个SquareNumberRequest对象获取结果。
以下是Java中的FanOutFanIn类,它通过异步分发请求来演示扇出扇入模式。

public class FanOutFanIn {
   
   
    public static Long fanOutFanIn(final List<SquareNumberRequest> requests, final Consumer consumer) {
   
   
        ExecutorService service = Executors.newFixedThreadPool(requests.size());
        // 扇出
        List<CompletableFuture<Void>> futures = requests
               .stream()
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值