From 436b8e24c3c04942cbd383d33459e9f0c35c1d8e Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Wed, 31 Oct 2018 15:35:00 +0800 Subject: [PATCH] add TtlEnhanced tag interface --- src/main/java/com/alibaba/ttl/TtlCallable.java | 4 ++-- src/main/java/com/alibaba/ttl/TtlEnhanced.java | 7 +++++++ src/main/java/com/alibaba/ttl/TtlRecursiveAction.java | 2 +- src/main/java/com/alibaba/ttl/TtlRecursiveTask.java | 2 +- src/main/java/com/alibaba/ttl/TtlRunnable.java | 4 ++-- src/main/java/com/alibaba/ttl/TtlTimerTask.java | 4 ++-- .../ttl/threadpool/ExecutorServiceTtlWrapper.java | 3 ++- .../com/alibaba/ttl/threadpool/ExecutorTtlWrapper.java | 3 ++- .../threadpool/ScheduledExecutorServiceTtlWrapper.java | 3 ++- .../java/com/alibaba/ttl/threadpool/TtlExecutors.java | 9 +++++---- 10 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/alibaba/ttl/TtlEnhanced.java diff --git a/src/main/java/com/alibaba/ttl/TtlCallable.java b/src/main/java/com/alibaba/ttl/TtlCallable.java index 43cab85a..eda4f0c4 100644 --- a/src/main/java/com/alibaba/ttl/TtlCallable.java +++ b/src/main/java/com/alibaba/ttl/TtlCallable.java @@ -28,7 +28,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; * @see java.util.concurrent.ExecutorCompletionService * @since 0.9.0 */ -public final class TtlCallable implements Callable { +public final class TtlCallable implements Callable, TtlEnhanced { private final AtomicReference capturedRef; private final Callable callable; private final boolean releaseTtlValueReferenceAfterCall; @@ -123,7 +123,7 @@ public final class TtlCallable implements Callable { public static TtlCallable get(@Nullable Callable callable, boolean releaseTtlValueReferenceAfterCall, boolean idempotent) { if (null == callable) return null; - if (callable instanceof TtlCallable) { + if (callable instanceof TtlEnhanced) { // avoid redundant decoration, and ensure idempotency if (idempotent) return (TtlCallable) callable; else throw new IllegalStateException("Already TtlCallable!"); diff --git a/src/main/java/com/alibaba/ttl/TtlEnhanced.java b/src/main/java/com/alibaba/ttl/TtlEnhanced.java new file mode 100644 index 00000000..9b2360e9 --- /dev/null +++ b/src/main/java/com/alibaba/ttl/TtlEnhanced.java @@ -0,0 +1,7 @@ +package com.alibaba.ttl; + +/** + * a Ttl marker/tag interface, for ttl enhanced class, for example {@code TTL wrapper}. + */ +public interface TtlEnhanced { +} diff --git a/src/main/java/com/alibaba/ttl/TtlRecursiveAction.java b/src/main/java/com/alibaba/ttl/TtlRecursiveAction.java index 9f713f53..de5a0dea 100644 --- a/src/main/java/com/alibaba/ttl/TtlRecursiveAction.java +++ b/src/main/java/com/alibaba/ttl/TtlRecursiveAction.java @@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; * @see java.util.concurrent.RecursiveAction * @since 2.4.0 */ -public abstract class TtlRecursiveAction extends ForkJoinTask { +public abstract class TtlRecursiveAction extends ForkJoinTask implements TtlEnhanced { private static final long serialVersionUID = -5753568484583412377L; diff --git a/src/main/java/com/alibaba/ttl/TtlRecursiveTask.java b/src/main/java/com/alibaba/ttl/TtlRecursiveTask.java index 58781536..29dbe43c 100644 --- a/src/main/java/com/alibaba/ttl/TtlRecursiveTask.java +++ b/src/main/java/com/alibaba/ttl/TtlRecursiveTask.java @@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; * @see java.util.concurrent.RecursiveTask * @since 2.4.0 */ -public abstract class TtlRecursiveTask extends ForkJoinTask { +public abstract class TtlRecursiveTask extends ForkJoinTask implements TtlEnhanced { private static final long serialVersionUID = 1814679366926362436L; diff --git a/src/main/java/com/alibaba/ttl/TtlRunnable.java b/src/main/java/com/alibaba/ttl/TtlRunnable.java index 62b2c2f1..dae3ed9a 100644 --- a/src/main/java/com/alibaba/ttl/TtlRunnable.java +++ b/src/main/java/com/alibaba/ttl/TtlRunnable.java @@ -25,7 +25,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; * @see java.util.concurrent.Executors * @since 0.9.0 */ -public final class TtlRunnable implements Runnable { +public final class TtlRunnable implements Runnable, TtlEnhanced { private final AtomicReference capturedRef; private final Runnable runnable; private final boolean releaseTtlValueReferenceAfterRun; @@ -122,7 +122,7 @@ public final class TtlRunnable implements Runnable { public static TtlRunnable get(@Nullable Runnable runnable, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) { if (null == runnable) return null; - if (runnable instanceof TtlRunnable) { + if (runnable instanceof TtlEnhanced) { // avoid redundant decoration, and ensure idempotency if (idempotent) return (TtlRunnable) runnable; else throw new IllegalStateException("Already TtlRunnable!"); diff --git a/src/main/java/com/alibaba/ttl/TtlTimerTask.java b/src/main/java/com/alibaba/ttl/TtlTimerTask.java index 1e02e816..9398a982 100644 --- a/src/main/java/com/alibaba/ttl/TtlTimerTask.java +++ b/src/main/java/com/alibaba/ttl/TtlTimerTask.java @@ -25,7 +25,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; * @deprecated Use {@link TtlRunnable}, {@link java.util.concurrent.ScheduledExecutorService} instead of {@link java.util.Timer}, {@link java.util.TimerTask}. */ @Deprecated -public final class TtlTimerTask extends TimerTask { +public final class TtlTimerTask extends TimerTask implements TtlEnhanced { private final AtomicReference capturedRef; private final TimerTask timerTask; private final boolean releaseTtlValueReferenceAfterRun; @@ -121,7 +121,7 @@ public final class TtlTimerTask extends TimerTask { public static TtlTimerTask get(@Nullable TimerTask timerTask, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) { if (null == timerTask) return null; - if (timerTask instanceof TtlTimerTask) { + if (timerTask instanceof TtlEnhanced) { // avoid redundant decoration, and ensure idempotency if (idempotent) return (TtlTimerTask) timerTask; else throw new IllegalStateException("Already TtlTimerTask!"); diff --git a/src/main/java/com/alibaba/ttl/threadpool/ExecutorServiceTtlWrapper.java b/src/main/java/com/alibaba/ttl/threadpool/ExecutorServiceTtlWrapper.java index 815aa54b..8615ac38 100644 --- a/src/main/java/com/alibaba/ttl/threadpool/ExecutorServiceTtlWrapper.java +++ b/src/main/java/com/alibaba/ttl/threadpool/ExecutorServiceTtlWrapper.java @@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TtlCallable; +import com.alibaba.ttl.TtlEnhanced; import com.alibaba.ttl.TtlRunnable; import javax.annotation.Nonnull; @@ -17,7 +18,7 @@ import java.util.concurrent.*; * @author Jerry Lee (oldratlee at gmail dot com) * @since 0.9.0 */ -class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorService { +class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorService, TtlEnhanced { private final ExecutorService executorService; ExecutorServiceTtlWrapper(@Nonnull ExecutorService executorService) { diff --git a/src/main/java/com/alibaba/ttl/threadpool/ExecutorTtlWrapper.java b/src/main/java/com/alibaba/ttl/threadpool/ExecutorTtlWrapper.java index ae4f24d0..ccee4056 100644 --- a/src/main/java/com/alibaba/ttl/threadpool/ExecutorTtlWrapper.java +++ b/src/main/java/com/alibaba/ttl/threadpool/ExecutorTtlWrapper.java @@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TtlRunnable; +import com.alibaba.ttl.TtlEnhanced; import javax.annotation.Nonnull; import java.util.concurrent.Executor; @@ -14,7 +15,7 @@ import java.util.concurrent.Executor; * @author Jerry Lee (oldratlee at gmail dot com) * @since 0.9.0 */ -class ExecutorTtlWrapper implements Executor { +class ExecutorTtlWrapper implements Executor, TtlEnhanced { private final Executor executor; ExecutorTtlWrapper(@Nonnull Executor executor) { diff --git a/src/main/java/com/alibaba/ttl/threadpool/ScheduledExecutorServiceTtlWrapper.java b/src/main/java/com/alibaba/ttl/threadpool/ScheduledExecutorServiceTtlWrapper.java index 8266031b..ec35d470 100644 --- a/src/main/java/com/alibaba/ttl/threadpool/ScheduledExecutorServiceTtlWrapper.java +++ b/src/main/java/com/alibaba/ttl/threadpool/ScheduledExecutorServiceTtlWrapper.java @@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TtlCallable; +import com.alibaba.ttl.TtlEnhanced; import com.alibaba.ttl.TtlRunnable; import javax.annotation.Nonnull; @@ -15,7 +16,7 @@ import java.util.concurrent.*; * @author Jerry Lee (oldratlee at gmail dot com) * @since 0.9.0 */ -class ScheduledExecutorServiceTtlWrapper extends ExecutorServiceTtlWrapper implements ScheduledExecutorService { +class ScheduledExecutorServiceTtlWrapper extends ExecutorServiceTtlWrapper implements ScheduledExecutorService, TtlEnhanced { final ScheduledExecutorService scheduledExecutorService; public ScheduledExecutorServiceTtlWrapper(@Nonnull ScheduledExecutorService scheduledExecutorService) { diff --git a/src/main/java/com/alibaba/ttl/threadpool/TtlExecutors.java b/src/main/java/com/alibaba/ttl/threadpool/TtlExecutors.java index 5b3889c0..502435c7 100644 --- a/src/main/java/com/alibaba/ttl/threadpool/TtlExecutors.java +++ b/src/main/java/com/alibaba/ttl/threadpool/TtlExecutors.java @@ -1,6 +1,7 @@ package com.alibaba.ttl.threadpool; import com.alibaba.ttl.TransmittableThreadLocal; +import com.alibaba.ttl.TtlEnhanced; import com.alibaba.ttl.threadpool.agent.TtlAgent; import javax.annotation.Nullable; @@ -34,7 +35,7 @@ public final class TtlExecutors { */ @Nullable public static Executor getTtlExecutor(@Nullable Executor executor) { - if (TtlAgent.isTtlAgentLoaded() || null == executor || executor instanceof ExecutorTtlWrapper) { + if (TtlAgent.isTtlAgentLoaded() || null == executor || executor instanceof TtlEnhanced) { return executor; } return new ExecutorTtlWrapper(executor); @@ -47,7 +48,7 @@ public final class TtlExecutors { */ @Nullable public static ExecutorService getTtlExecutorService(@Nullable ExecutorService executorService) { - if (TtlAgent.isTtlAgentLoaded() || executorService == null || executorService instanceof ExecutorServiceTtlWrapper) { + if (TtlAgent.isTtlAgentLoaded() || executorService == null || executorService instanceof TtlEnhanced) { return executorService; } return new ExecutorServiceTtlWrapper(executorService); @@ -60,7 +61,7 @@ public final class TtlExecutors { */ @Nullable public static ScheduledExecutorService getTtlScheduledExecutorService(@Nullable ScheduledExecutorService scheduledExecutorService) { - if (TtlAgent.isTtlAgentLoaded() || scheduledExecutorService == null || scheduledExecutorService instanceof ScheduledExecutorServiceTtlWrapper) { + if (TtlAgent.isTtlAgentLoaded() || scheduledExecutorService == null || scheduledExecutorService instanceof TtlEnhanced) { return scheduledExecutorService; } return new ScheduledExecutorServiceTtlWrapper(scheduledExecutorService); @@ -82,7 +83,7 @@ public final class TtlExecutors { * @since 2.8.0 */ public static boolean isTtlWrapper(@Nullable T executor) { - return executor instanceof ExecutorTtlWrapper; + return executor instanceof TtlEnhanced; } /** -- GitLab