From 101d4405108ad0950d1ab4d8be039fdceb0daf5b Mon Sep 17 00:00:00 2001 From: SerLiunx-ctrl <17689543@qq.com> Date: Wed, 19 Feb 2025 14:12:59 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E8=A7=A6=E5=8F=91=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=AF=B4=E6=98=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../machine/AbstractStateMachine.java | 13 ++++++++++++- .../statemanagement/machine/StateMachineType.java | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/serliunx/statemanagement/machine/AbstractStateMachine.java b/src/main/java/com/serliunx/statemanagement/machine/AbstractStateMachine.java index 64bc2be..6f79c0d 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/AbstractStateMachine.java +++ b/src/main/java/com/serliunx/statemanagement/machine/AbstractStateMachine.java @@ -263,13 +263,24 @@ public abstract class AbstractStateMachine extends AbstractStateManager im (stateHandler = hw.getStateHandler()) == null) return; final StateHandlerProcessParams params = new StateHandlerProcessParams<>(from, to, null); + + /* + * 一、异步逻辑校验: 首先判断是否需要异步执行状态处理器, 具体的状态逻辑处理器优先级大于全局 + * 即: 如果全局指定了同步执行, 但此时特定的状态处理器注册时指定为异步执行的话. 该处理器 + * 为异步执行. + * + * 二、 当确定了为异步执行时会选择合适的异步执行器(通常都是线程池), 如果状态处理器注册 + * 时指定了异步执行器, 则优先使用该异步执行器;反则会使用全局的异步执行器。如果上一步骤 + * 中确定为异步执行但当前步骤没有寻找到合适的异步执行器则会报空指针异常(当前版本不会出现) + */ if (hw.getAsync() == null ? (context.async != null && context.async) : hw.getAsync()) { final Executor executor; if ((executor = hw.getExecutor() == null ? context.executor : hw.getExecutor()) == null) - throw new NullPointerException(); + // 不应该发生 + throw new Error(); executor.execute(() -> stateHandler.handle(params)); } else stateHandler.handle(params); diff --git a/src/main/java/com/serliunx/statemanagement/machine/StateMachineType.java b/src/main/java/com/serliunx/statemanagement/machine/StateMachineType.java index e33145e..ac9ea0b 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/StateMachineType.java +++ b/src/main/java/com/serliunx/statemanagement/machine/StateMachineType.java @@ -11,6 +11,7 @@ public enum StateMachineType { * 标准, 切换使用读写锁 */ STANDARD, + /** * 并发型, 切换使用CAS乐观锁 */