T () { T value = myValue; if (value == null) { //noinspection SynchronizeOnThis synchronized (this) { value = myValue; if (value == null) { RecursionGuard.StackStamp stamp = RecursionManager.markStack(); value = compute(); if (stamp.mayCacheNow()) { myValue = value; } } } } return value; }