提交 436b8e24 编写于 作者: oldratlee's avatar oldratlee 🔥

add TtlEnhanced tag interface

上级 dab7ea93
...@@ -28,7 +28,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; ...@@ -28,7 +28,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*;
* @see java.util.concurrent.ExecutorCompletionService * @see java.util.concurrent.ExecutorCompletionService
* @since 0.9.0 * @since 0.9.0
*/ */
public final class TtlCallable<V> implements Callable<V> { public final class TtlCallable<V> implements Callable<V>, TtlEnhanced {
private final AtomicReference<Object> capturedRef; private final AtomicReference<Object> capturedRef;
private final Callable<V> callable; private final Callable<V> callable;
private final boolean releaseTtlValueReferenceAfterCall; private final boolean releaseTtlValueReferenceAfterCall;
...@@ -123,7 +123,7 @@ public final class TtlCallable<V> implements Callable<V> { ...@@ -123,7 +123,7 @@ public final class TtlCallable<V> implements Callable<V> {
public static <T> TtlCallable<T> get(@Nullable Callable<T> callable, boolean releaseTtlValueReferenceAfterCall, boolean idempotent) { public static <T> TtlCallable<T> get(@Nullable Callable<T> callable, boolean releaseTtlValueReferenceAfterCall, boolean idempotent) {
if (null == callable) return null; if (null == callable) return null;
if (callable instanceof TtlCallable) { if (callable instanceof TtlEnhanced) {
// avoid redundant decoration, and ensure idempotency // avoid redundant decoration, and ensure idempotency
if (idempotent) return (TtlCallable<T>) callable; if (idempotent) return (TtlCallable<T>) callable;
else throw new IllegalStateException("Already TtlCallable!"); else throw new IllegalStateException("Already TtlCallable!");
......
package com.alibaba.ttl;
/**
* a Ttl marker/tag interface, for ttl enhanced class, for example {@code TTL wrapper}.
*/
public interface TtlEnhanced {
}
...@@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; ...@@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*;
* @see java.util.concurrent.RecursiveAction * @see java.util.concurrent.RecursiveAction
* @since 2.4.0 * @since 2.4.0
*/ */
public abstract class TtlRecursiveAction extends ForkJoinTask<Void> { public abstract class TtlRecursiveAction extends ForkJoinTask<Void> implements TtlEnhanced {
private static final long serialVersionUID = -5753568484583412377L; private static final long serialVersionUID = -5753568484583412377L;
......
...@@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; ...@@ -11,7 +11,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*;
* @see java.util.concurrent.RecursiveTask * @see java.util.concurrent.RecursiveTask
* @since 2.4.0 * @since 2.4.0
*/ */
public abstract class TtlRecursiveTask<V> extends ForkJoinTask<V> { public abstract class TtlRecursiveTask<V> extends ForkJoinTask<V> implements TtlEnhanced {
private static final long serialVersionUID = 1814679366926362436L; private static final long serialVersionUID = 1814679366926362436L;
......
...@@ -25,7 +25,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; ...@@ -25,7 +25,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*;
* @see java.util.concurrent.Executors * @see java.util.concurrent.Executors
* @since 0.9.0 * @since 0.9.0
*/ */
public final class TtlRunnable implements Runnable { public final class TtlRunnable implements Runnable, TtlEnhanced {
private final AtomicReference<Object> capturedRef; private final AtomicReference<Object> capturedRef;
private final Runnable runnable; private final Runnable runnable;
private final boolean releaseTtlValueReferenceAfterRun; private final boolean releaseTtlValueReferenceAfterRun;
...@@ -122,7 +122,7 @@ public final class TtlRunnable implements Runnable { ...@@ -122,7 +122,7 @@ public final class TtlRunnable implements Runnable {
public static TtlRunnable get(@Nullable Runnable runnable, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) { public static TtlRunnable get(@Nullable Runnable runnable, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) {
if (null == runnable) return null; if (null == runnable) return null;
if (runnable instanceof TtlRunnable) { if (runnable instanceof TtlEnhanced) {
// avoid redundant decoration, and ensure idempotency // avoid redundant decoration, and ensure idempotency
if (idempotent) return (TtlRunnable) runnable; if (idempotent) return (TtlRunnable) runnable;
else throw new IllegalStateException("Already TtlRunnable!"); else throw new IllegalStateException("Already TtlRunnable!");
......
...@@ -25,7 +25,7 @@ import static com.alibaba.ttl.TransmittableThreadLocal.Transmitter.*; ...@@ -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 Use {@link TtlRunnable}, {@link java.util.concurrent.ScheduledExecutorService} instead of {@link java.util.Timer}, {@link java.util.TimerTask}.
*/ */
@Deprecated @Deprecated
public final class TtlTimerTask extends TimerTask { public final class TtlTimerTask extends TimerTask implements TtlEnhanced {
private final AtomicReference<Object> capturedRef; private final AtomicReference<Object> capturedRef;
private final TimerTask timerTask; private final TimerTask timerTask;
private final boolean releaseTtlValueReferenceAfterRun; private final boolean releaseTtlValueReferenceAfterRun;
...@@ -121,7 +121,7 @@ public final class TtlTimerTask extends TimerTask { ...@@ -121,7 +121,7 @@ public final class TtlTimerTask extends TimerTask {
public static TtlTimerTask get(@Nullable TimerTask timerTask, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) { public static TtlTimerTask get(@Nullable TimerTask timerTask, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) {
if (null == timerTask) return null; if (null == timerTask) return null;
if (timerTask instanceof TtlTimerTask) { if (timerTask instanceof TtlEnhanced) {
// avoid redundant decoration, and ensure idempotency // avoid redundant decoration, and ensure idempotency
if (idempotent) return (TtlTimerTask) timerTask; if (idempotent) return (TtlTimerTask) timerTask;
else throw new IllegalStateException("Already TtlTimerTask!"); else throw new IllegalStateException("Already TtlTimerTask!");
......
...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; ...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlCallable; import com.alibaba.ttl.TtlCallable;
import com.alibaba.ttl.TtlEnhanced;
import com.alibaba.ttl.TtlRunnable; import com.alibaba.ttl.TtlRunnable;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
...@@ -17,7 +18,7 @@ import java.util.concurrent.*; ...@@ -17,7 +18,7 @@ import java.util.concurrent.*;
* @author Jerry Lee (oldratlee at gmail dot com) * @author Jerry Lee (oldratlee at gmail dot com)
* @since 0.9.0 * @since 0.9.0
*/ */
class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorService { class ExecutorServiceTtlWrapper extends ExecutorTtlWrapper implements ExecutorService, TtlEnhanced {
private final ExecutorService executorService; private final ExecutorService executorService;
ExecutorServiceTtlWrapper(@Nonnull ExecutorService executorService) { ExecutorServiceTtlWrapper(@Nonnull ExecutorService executorService) {
......
...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; ...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlRunnable; import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.TtlEnhanced;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
...@@ -14,7 +15,7 @@ import java.util.concurrent.Executor; ...@@ -14,7 +15,7 @@ import java.util.concurrent.Executor;
* @author Jerry Lee (oldratlee at gmail dot com) * @author Jerry Lee (oldratlee at gmail dot com)
* @since 0.9.0 * @since 0.9.0
*/ */
class ExecutorTtlWrapper implements Executor { class ExecutorTtlWrapper implements Executor, TtlEnhanced {
private final Executor executor; private final Executor executor;
ExecutorTtlWrapper(@Nonnull Executor executor) { ExecutorTtlWrapper(@Nonnull Executor executor) {
......
...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool; ...@@ -2,6 +2,7 @@ package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlCallable; import com.alibaba.ttl.TtlCallable;
import com.alibaba.ttl.TtlEnhanced;
import com.alibaba.ttl.TtlRunnable; import com.alibaba.ttl.TtlRunnable;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
...@@ -15,7 +16,7 @@ import java.util.concurrent.*; ...@@ -15,7 +16,7 @@ import java.util.concurrent.*;
* @author Jerry Lee (oldratlee at gmail dot com) * @author Jerry Lee (oldratlee at gmail dot com)
* @since 0.9.0 * @since 0.9.0
*/ */
class ScheduledExecutorServiceTtlWrapper extends ExecutorServiceTtlWrapper implements ScheduledExecutorService { class ScheduledExecutorServiceTtlWrapper extends ExecutorServiceTtlWrapper implements ScheduledExecutorService, TtlEnhanced {
final ScheduledExecutorService scheduledExecutorService; final ScheduledExecutorService scheduledExecutorService;
public ScheduledExecutorServiceTtlWrapper(@Nonnull ScheduledExecutorService scheduledExecutorService) { public ScheduledExecutorServiceTtlWrapper(@Nonnull ScheduledExecutorService scheduledExecutorService) {
......
package com.alibaba.ttl.threadpool; package com.alibaba.ttl.threadpool;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlEnhanced;
import com.alibaba.ttl.threadpool.agent.TtlAgent; import com.alibaba.ttl.threadpool.agent.TtlAgent;
import javax.annotation.Nullable; import javax.annotation.Nullable;
...@@ -34,7 +35,7 @@ public final class TtlExecutors { ...@@ -34,7 +35,7 @@ public final class TtlExecutors {
*/ */
@Nullable @Nullable
public static Executor getTtlExecutor(@Nullable Executor executor) { 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 executor;
} }
return new ExecutorTtlWrapper(executor); return new ExecutorTtlWrapper(executor);
...@@ -47,7 +48,7 @@ public final class TtlExecutors { ...@@ -47,7 +48,7 @@ public final class TtlExecutors {
*/ */
@Nullable @Nullable
public static ExecutorService getTtlExecutorService(@Nullable ExecutorService executorService) { 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 executorService;
} }
return new ExecutorServiceTtlWrapper(executorService); return new ExecutorServiceTtlWrapper(executorService);
...@@ -60,7 +61,7 @@ public final class TtlExecutors { ...@@ -60,7 +61,7 @@ public final class TtlExecutors {
*/ */
@Nullable @Nullable
public static ScheduledExecutorService getTtlScheduledExecutorService(@Nullable ScheduledExecutorService scheduledExecutorService) { 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 scheduledExecutorService;
} }
return new ScheduledExecutorServiceTtlWrapper(scheduledExecutorService); return new ScheduledExecutorServiceTtlWrapper(scheduledExecutorService);
...@@ -82,7 +83,7 @@ public final class TtlExecutors { ...@@ -82,7 +83,7 @@ public final class TtlExecutors {
* @since 2.8.0 * @since 2.8.0
*/ */
public static <T extends Executor> boolean isTtlWrapper(@Nullable T executor) { public static <T extends Executor> boolean isTtlWrapper(@Nullable T executor) {
return executor instanceof ExecutorTtlWrapper; return executor instanceof TtlEnhanced;
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册