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)