AtomicSafeInitializer¶
- public class org.apache.commons.lang3.concurrent.AtomicSafeInitializer<T> extends AbstractConcurrentInitializer<T, ConcurrentException>[source]¶
A specialized
ConcurrentInitializerimplementation which is similar toAtomicInitializer, but ensures that the#initialize()method is called only once.As
AtomicInitializerthis class is based on atomic variables, so it can create an object under concurrent access without synchronization. However, it implements an additional check to guarantee that the#initialize()method which actually creates the object cannot be called multiple times.Because of this additional check this implementation is slightly less efficient than
AtomicInitializer, but if the object creation in theinitialize()method is expensive or if multiple invocations ofinitialize()are problematic, it is the better alternative.From its semantics this class has the same properties as
LazyInitializer. It is a “save” implementation of the lazy initializer pattern. Comparing both classes in terms of efficiency is difficult because which one is faster depends on multiple factors. BecauseAtomicSafeInitializerdoes not use synchronization at all it probably outrunsLazyInitializer, at least under low or moderate concurrent access. Developers should run their own benchmarks on the expected target platform to decide which implementation is suitable for their specific use case.- Parameters:
<T> – The type of the object managed by this initializer class
- Since:
3.0
Constructors¶
Constructs a new instance. |
Methods¶
Creates a new builder. |
|
Gets (and initialize, if not initialized yet) the required object. |
|
Gets an Exception with a type of E as defined by a concrete subclass of this class. |
|
Tests whether this instance is initialized. |
- public static <T> AtomicSafeInitializer.Builder<AtomicSafeInitializer<T>, T> builder()[source]¶
Creates a new builder.
- Type parameters:
<T> – The type of object to build.
- Returns:
A new builder.
- Since:
3.14.0
- @Override public final T get() throws ConcurrentException[source]¶
Gets (and initialize, if not initialized yet) the required object.
- Returns:
lazily initialized object.
- Throws:
org.apache.commons.lang3.concurrent.ConcurrentException – Thrown if the initialization of the object causes an exception.
- @Override protected ConcurrentException getTypedException(Exception e)[source]¶
Gets an Exception with a type of E as defined by a concrete subclass of this class.
- Parameters:
e – The actual exception that was thrown.
- Returns:
A new exception with the actual type of E, that wraps e.