diff --git a/src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java b/src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java index 992ca06..3c28d0e 100644 --- a/src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java +++ b/src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java @@ -457,4 +457,23 @@ public class ZillaRuntime { } } } + + public interface LazyGet { T init();} + + public static T lazyGet(AtomicReference ref, LazyGet init, LazyGet error) { + if (ref.get() == null) { + //noinspection SynchronizationOnLocalVariableOrMethodParameter + synchronized (ref) { + if (ref.get() == null) { + try { + ref.set(init.init()); + } catch (Exception e) { + ref.set(error.init()); + } + } + } + } + return ref.get(); + } + }