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.*;
8   
9   /**
10   * Executor that wraps executing runnables in a wrapper that transfers the threadlocal context
11   */
12  class ThreadLocalDelegateExecutor<C> implements Executor
13  {
14      private final Executor delegate;
15      protected final ThreadLocalContextManager<C> manager;
16  
17      ThreadLocalDelegateExecutor(ThreadLocalContextManager<C> manager, Executor delegate)
18      {
19          this.delegate = checkNotNull(delegate);
20          this.manager = checkNotNull(manager);
21      }
22  
23      public void execute(Runnable runnable)
24      {
25          final Runnable wrapper = new ThreadLocalDelegateRunnable<C>(manager, runnable);
26          delegate.execute(wrapper);
27      }
28  }