From 269bc22ea5223ca3f19b77d6169f6fc4c01985c1 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Wed, 27 Aug 2025 14:33:27 +0800 Subject: [PATCH] =?UTF-8?q?feature=20#ICUMKV=20=E5=85=A8=E9=9D=A2=E6=94=AF?= =?UTF-8?q?=E6=8C=81jdk21=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=94=AF=E6=8C=81jdk2?= =?UTF-8?q?1=E4=B8=AD=E7=9A=84=E8=99=9A=E6=8B=9F=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/flow/element/Node.java | 20 ++++++++++++++----- .../java/com/yomahub/liteflow/slot/Slot.java | 4 ++-- .../liteflow/thread/ExecutorBuilder.java | 2 +- .../liteflow/thread/ExecutorHelper.java | 9 +++++++-- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java index 11d082ecc..74c3717b3 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java @@ -570,13 +570,18 @@ public class Node implements Executable, Cloneable, Rollbackable{ if (parentValue == null) { return null; } - // 克隆 Stack - return (Stack>) parentValue.clone(); + + Stack> newStack = new Stack<>(); + for (TupleOf2 tuple : parentValue) { + newStack.push(new TupleOf2<>(tuple.getA(), tuple.getB())); + } + + return newStack; } }; node.loopObjectTL = new TransmittableThreadLocal>>() { /** - * 在你提供的这个 TTL 版本中,我们重写 public T copy(T parentValue) 方法 + * 我们重写 public T copy(T parentValue) 方法 * 来实现 Stack 的克隆,以确保线程隔离。 */ @Override @@ -585,8 +590,13 @@ public class Node implements Executable, Cloneable, Rollbackable{ if (parentValue == null) { return null; } - // 克隆 Stack - return (Stack>) parentValue.clone(); + + Stack> newStack = new Stack<>(); + for (TupleOf2 tuple : parentValue) { + newStack.push(new TupleOf2<>(tuple.getA(), tuple.getB())); + } + + return newStack; } }; node.accessResult = new TransmittableThreadLocal<>(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java index 0418a13dc..4bceefbb5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java @@ -125,12 +125,12 @@ public class Slot { } private void putThreadMetaDataMap(String key, T t) { - String threadKey = StrUtil.format("{}_{}", key, Thread.currentThread().getName()); + String threadKey = StrUtil.format("{}_{}", key, Thread.currentThread().getId()); putMetaDataMap(threadKey, t); } private T getThreadMetaData(String key) { - String threadKey = StrUtil.format("{}_{}", key, Thread.currentThread().getName()); + String threadKey = StrUtil.format("{}_{}", key, Thread.currentThread().getId()); return (T) metaDataMap.get(threadKey); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorBuilder.java index b0859e0bc..d277956a5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorBuilder.java @@ -24,7 +24,7 @@ public interface ExecutorBuilder { if (ExecutorHelper.loadInstance().isEnabledVirtualThreads()){ Method method = ReflectUtil.getMethodByName(Executors.class, "newVirtualThreadPerTaskExecutor"); - executorService = ReflectUtil.invokeStatic(method); + executorService = TtlExecutors.getTtlExecutorService(ReflectUtil.invokeStatic(method)); }else{ executorService = TtlExecutors.getTtlExecutorService(new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(queueCapacity), new ThreadFactory() { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java index e79f702f1..d27618963 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java @@ -216,9 +216,14 @@ public class ExecutorHelper { return executor; } + private Boolean isEnabledVirtualThreadsCache; + public boolean isEnabledVirtualThreads(){ - LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); - return BooleanUtil.isTrue(liteflowConfig.getEnableVirtualThread() && JdkUtil.JVM_VERSION == 21); + if (isEnabledVirtualThreadsCache == null){ + LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); + isEnabledVirtualThreadsCache = BooleanUtil.isTrue(liteflowConfig.getEnableVirtualThread() && JdkUtil.JVM_VERSION == 21); + } + return isEnabledVirtualThreadsCache; } }