Class AtomicSafeInitializer<T>
- Type Parameters:
- T- the type of the object managed by this initializer class
- All Implemented Interfaces:
- ConcurrentInitializer<T>,- FailableSupplier<T,- ConcurrentException> 
ConcurrentInitializer implementation which is similar
 to AtomicInitializer, but ensures that the AbstractConcurrentInitializer.initialize()
 method is called only once.
 
 As AtomicInitializer this 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
 AbstractConcurrentInitializer.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 the
 initialize() method is expensive or if multiple invocations of
 initialize() 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. Because
 AtomicSafeInitializer does not use synchronization at all it probably
 outruns LazyInitializer, 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.
 
- Since:
- 3.0
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classAtomicSafeInitializer.Builder<I extends AtomicSafeInitializer<T>,T> Builds a new instance.Nested classes/interfaces inherited from class org.apache.commons.lang3.concurrent.AbstractConcurrentInitializerAbstractConcurrentInitializer.AbstractBuilder<I extends AbstractConcurrentInitializer<T,E>, T, B extends AbstractConcurrentInitializer.AbstractBuilder<I, T, B, E>, E extends Exception> 
- 
Field SummaryFields inherited from interface org.apache.commons.lang3.function.FailableSupplierNUL
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic <T> AtomicSafeInitializer.Builder<AtomicSafeInitializer<T>,T> builder()Creates a new builder.final Tget()Gets (and initialize, if not initialized yet) the required objectprotected ConcurrentExceptionGets an Exception with a type of E as defined by a concrete subclass of this class.booleanTests whether this instance is initialized.Methods inherited from class org.apache.commons.lang3.concurrent.AbstractConcurrentInitializerclose, initialize
- 
Constructor Details- 
AtomicSafeInitializerpublic AtomicSafeInitializer()Constructs a new instance.
 
- 
- 
Method Details- 
builderCreates a new builder.- Type Parameters:
- T- the type of object to build.
- Returns:
- a new builder.
- Since:
- 3.14.0
 
- 
getGets (and initialize, if not initialized yet) the required object- Returns:
- lazily initialized object
- Throws:
- ConcurrentException- if the initialization of the object causes an exception
 
- 
getTypedExceptionGets an Exception with a type of E as defined by a concrete subclass of this class.- Specified by:
- getTypedExceptionin class- AbstractConcurrentInitializer<T,- ConcurrentException> 
- Parameters:
- e- The actual exception that was thrown
- Returns:
- a new exception with the actual type of E, that wraps e.
 
- 
isInitializedTests whether this instance is initialized. Once initialized, always returns true.- Specified by:
- isInitializedin class- AbstractConcurrentInitializer<T,- ConcurrentException> 
- Returns:
- whether this instance is initialized. Once initialized, always returns true.
- Since:
- 3.14.0
 
 
-