public T get() {
      T v = value;
      if (v != UNINITIALIZED_VALUE) {
        return value;
      }

      //noinspection SynchronizeOnThis
      synchronized (this) {
        v = value;
        if (v != UNINITIALIZED_VALUE) {
          return value;
        }

        v = initializer.get();
        value = v;
      }
      return value;
    }
public T get()