T () { 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; }