AtomicSafeInitializer.java 931 Bytes
package org.apache.commons.lang3.concurrent;

import java.util.concurrent.atomic.AtomicReference;

public abstract class AtomicSafeInitializer<T>
  implements ConcurrentInitializer<T>
{
  private final AtomicReference<AtomicSafeInitializer<T>> a = new AtomicReference();
  private final AtomicReference<T> b = new AtomicReference();
  
  public final T get()
    throws ConcurrentException
  {
    Object localObject;
    for (;;)
    {
      localObject = this.b.get();
      if (localObject != null) {
        break;
      }
      if (this.a.compareAndSet(null, this)) {
        this.b.set(initialize());
      }
    }
    return (T)localObject;
  }
  
  protected abstract T initialize()
    throws ConcurrentException;
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/org/apache/commons/lang3/concurrent/AtomicSafeInitializer.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */