View Javadoc

1   package com.atlassian.sal.core.executor;
2   
3   import com.atlassian.sal.api.executor.ThreadLocalContextManager;
4   
5   import java.util.concurrent.Executor;
6   
7   import static com.google.common.base.Preconditions.checkNotNull;
8   
9   /**
10   * Executor that wraps executing runnables in a wrapper that transfers the threadlocal context
11   */
12  class ThreadLocalDelegateExecutor<C> implements Executor {
13      private final Executor delegate;
14      protected final ThreadLocalContextManager<C> manager;
15  
16      ThreadLocalDelegateExecutor(ThreadLocalContextManager<C> manager, Executor delegate) {
17          this.delegate = checkNotNull(delegate);
18          this.manager = checkNotNull(manager);
19      }
20  
21      public void execute(Runnable runnable) {
22          final Runnable wrapper = new ThreadLocalDelegateRunnable<C>(manager, runnable);
23          delegate.execute(wrapper);
24      }
25  }