View Javadoc

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