JdkFutureAdapters.java 2.87 KB
package com.google.common.util.concurrent;

import com.google.common.annotations.Beta;
import com.google.common.base.Preconditions;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicBoolean;

@Beta
public final class JdkFutureAdapters
{
  public static <V> ListenableFuture<V> listenInPoolThread(Future<V> paramFuture)
  {
    if ((paramFuture instanceof ListenableFuture)) {
      return (ListenableFuture)paramFuture;
    }
    return new a(paramFuture);
  }
  
  public static <V> ListenableFuture<V> listenInPoolThread(Future<V> paramFuture, Executor paramExecutor)
  {
    Preconditions.checkNotNull(paramExecutor);
    if ((paramFuture instanceof ListenableFuture)) {
      return (ListenableFuture)paramFuture;
    }
    return new a(paramFuture, paramExecutor);
  }
  
  static final class a<V>
    extends ForwardingFuture<V>
    implements ListenableFuture<V>
  {
    private static final ThreadFactory a;
    private static final Executor b;
    private final Executor c;
    private final ExecutionList d = new ExecutionList();
    private final AtomicBoolean e = new AtomicBoolean(false);
    private final Future<V> f;
    
    static
    {
      ThreadFactory localThreadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ListenableFutureAdapter-thread-%d").build();
      a = localThreadFactory;
      b = Executors.newCachedThreadPool(localThreadFactory);
    }
    
    a(Future<V> paramFuture)
    {
      this(paramFuture, b);
    }
    
    a(Future<V> paramFuture, Executor paramExecutor)
    {
      this.f = ((Future)Preconditions.checkNotNull(paramFuture));
      this.c = ((Executor)Preconditions.checkNotNull(paramExecutor));
    }
    
    public final void addListener(Runnable paramRunnable, Executor paramExecutor)
    {
      this.d.add(paramRunnable, paramExecutor);
      if (this.e.compareAndSet(false, true))
      {
        if (this.f.isDone()) {
          this.d.execute();
        }
      }
      else {
        return;
      }
      this.c.execute(new Runnable()
      {
        public final void run()
        {
          try
          {
            Uninterruptibles.getUninterruptibly(JdkFutureAdapters.a.a(JdkFutureAdapters.a.this));
            JdkFutureAdapters.a.b(JdkFutureAdapters.a.this).execute();
            return;
          }
          catch (Error localError)
          {
            throw localError;
          }
          catch (Throwable localThrowable)
          {
            for (;;) {}
          }
        }
      });
    }
    
    protected final Future<V> delegate()
    {
      return this.f;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/util/concurrent/JdkFutureAdapters.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */