class Lazy implements Provider<T> {

  @Override
  public T get() {
    Object result = instance;
    if (result == UNINITIALIZED) {
      synchronized (this) {
        result = instance;
        if (result == UNINITIALIZED) {
          result = provider.get();
          instance = result;
          /* Null out the reference to the provider. We are never going to need it again, so we
           * can make it eligible for GC. */
          provider = null;
        }
      }
    }

    @SuppressWarnings("unchecked")
    T tResult = (T) result;
    return tResult;
  }

    Lazy(T instance);
  public  Lazy(Provider<T> provider);

}