LiteFlow 总结(3)-When表达式-all策略模式

前言:

接上一章节,我们讲述了Then表达式之后,我们来聊聊When表达式。
首先,我们先来说一下什么是when表达式,when表达式来liteflow里面是一个比较重要的表达式。其主要的功能就是实现多任务并发执行的效果,以提高程序运行效率。也可以解决一些流程上的问题。

1.ParallelStrategyEnum

这是一个枚举类,其作用是有对应并行策略的一个执行器class对象

public enum ParallelStrategyEnum {
    
    ANY("anyOf", "完成任一任务", AnyOfParallelExecutor.class),

    ALL("allOf", "完成全部任务", AllOfParallelExecutor.class),

    SPECIFY("must", "完成指定 ID 任务", SpecifyParallelExecutor.class);

    private String strategyType;

    private String description;

    private Class<? extends ParallelStrategyExecutor> clazz;

    ParallelStrategyEnum(String strategyType, String description, Class<? extends ParallelStrategyExecutor> clazz) {
        this.strategyType = strategyType;
        this.description = description;
        this.clazz = clazz;
    }

    public String getStrategyType() {
        return strategyType;
    }

    public void setStrategyType(String strategyType) {
        this.strategyType = strategyType;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Class<? extends ParallelStrategyExecutor> getClazz() {
        return clazz;
    }

    public void setClazz(Class<? extends ParallelStrategyExecutor> clazz) {
        this.clazz = clazz;
    }

那么其实,when里面是有三种并行策略的
1.实际上,就是对应官网上面的三种策略 有any关键字和must关键字,具体用法参考官网,这里就不再赘述

/**
 * EL规则中的any的操作符
 *
 * @author Bryan.Zhang
 * @since 2.8.0
 */
public class AnyOperator extends BaseOperator<WhenCondition> {

	@Override
	public WhenCondition build(Object[] objects) throws Exception {
		OperatorHelper.checkObjectSizeEqTwo(objects);

		WhenCondition whenCondition = OperatorHelper.convert(objects[0], WhenCondition.class);

		Boolean any = OperatorHelper.convert(objects[1], Boolean.class);
		whenCondition.setParallelStrategy(any ? ParallelStrategyEnum.ANY : ParallelStrategyEnum.ALL);
		return whenCondition;
	}

}

实际上,如果没有any关键字和must关键字,默认走的是all策略。那么我们来一个一个看

2.all策略执行器

image.png
以下是刚刚我们查看的方法
image.png
image.png
我们进入ExecutorBuilder查看
image.pngimage.png
我们回到刚刚最外面的线程池构建
image.png
image.png
我们进入fiterWhenTaskList方法可以看到
image.png
我们进入下面的wrappedFutureobj方法中
image.png
image.png
注意:这个线程池还是用于抛出超时异常,而真正执行的线程池是我们刚刚看到的上面的那个线程池执行。

image.png

image.png
image.png
好了就回到我们获取所有任务List后了,获取后就该执行了吧?
image.png
allof方法可以自行百度 以下,大概就是等待所有任务完成然后收集所有completefuture的结果
此时,我们进入handleTaskResult方法查看
其实总体流程大概就是这样,我也是一步一步看下来的,有一些东西还不是悟的很透彻,望大佬指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值