View Javadoc

1   package com.atlassian.sal.core.executor;
2   
3   import com.atlassian.sal.api.executor.ThreadLocalContextManager;
4   
5   import java.util.concurrent.Callable;
6   import java.util.concurrent.ScheduledExecutorService;
7   import java.util.concurrent.ScheduledFuture;
8   import java.util.concurrent.TimeUnit;
9   
10  import static com.google.common.base.Preconditions.*;
11  
12  /**
13   * Scheduled executor service that wraps executing callables and runnables in a wrapper that transfers the thread local
14   * state of the caller to the thread of the executing task.
15   *
16   * @since 2.0
17   */
18  public class ThreadLocalDelegateScheduledExecutorService<C> extends ThreadLocalDelegateExecutorService<C> implements ScheduledExecutorService
19  {
20      private final ScheduledExecutorService delegate;
21  
22      public ThreadLocalDelegateScheduledExecutorService(ThreadLocalContextManager<C> manager, ScheduledExecutorService delegate)
23      {
24          super(checkNotNull(manager), checkNotNull(delegate));
25          this.delegate = delegate;
26      }
27  
28      /**
29       * Only present to provide backwards compatibility
30       * @deprecated use {@link ThreadLocalDelegateScheduledExecutorService#ThreadLocalDelegateScheduledExecutorService(com.atlassian.sal.api.executor.ThreadLocalContextManager, java.util.concurrent.ScheduledExecutorService)}
31       */
32      public ThreadLocalDelegateScheduledExecutorService(com.atlassian.sal.core.executor.ThreadLocalContextManager<C> manager, ScheduledExecutorService delegate)
33      {
34          super(checkNotNull(manager), checkNotNull(delegate));
35          this.delegate = delegate;
36      }
37  
38      public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
39      {
40          return delegate.schedule(new ThreadLocalDelegateRunnable<C>(manager, command), delay, unit);
41      }
42  
43      public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
44      {
45          return delegate.schedule(new ThreadLocalDelegateCallable<C, V>(manager, callable), delay, unit);
46      }
47  
48      public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
49      {
50          return delegate.scheduleAtFixedRate(new ThreadLocalDelegateRunnable<C>(manager, command), initialDelay, period, unit);
51      }
52  
53      public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
54      {
55          return delegate.scheduleWithFixedDelay(new ThreadLocalDelegateRunnable<C>(manager, command), initialDelay, delay, unit);
56      }
57  }