Cheong Voon Leong created LANG-1496: ---------------------------------------
Summary: Lazily Initializing Singleton Object Key: LANG-1496 URL: https://issues.apache.org/jira/browse/LANG-1496 Project: Commons Lang Issue Type: Improvement Reporter: Cheong Voon Leong Java 8 functional interfaces are evaluated lazily. I think this is a better way to implement lazy initialization together with existing ConcurrentInitializer. Here is my proposed implementation. {code:java|title=LazySingletonInitializer.java|borderStyle=solid} public final class LazySingletonInitializer<T> implements ConcurrentInitializer<T> { private final Supplier<T> supplier; private final AtomicReference<T> ref; public LazySingletonInitializer(Supplier<T> supplier) { this.supplier = supplier; this.ref = new AtomicReference<>(); } @Override public final T get() throws ConcurrentException { T result = ref.get(); if (result == null) { synchronized (this) { result = ref.get(); if (result == null) { result = ref.updateAndGet((prev) -> (prev == null) ? supplier.get() : prev); } } } return result; } } {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)