Improve Javadoc
This commit is contained in:
@ -28,18 +28,18 @@ import org.slf4j.LoggerFactory;
|
||||
/**
|
||||
* Singleton pattern ensures that the class can have only one existing instance per Java classloader
|
||||
* instance and provides global access to it.
|
||||
* <p/>
|
||||
* <p>
|
||||
* One of the risks of this pattern is that bugs resulting from setting a singleton up in a
|
||||
* distributed environment can be tricky to debug, since it will work fine if you debug with a
|
||||
* single classloader. Additionally, these problems can crop up a while after the implementation of
|
||||
* a singleton, since they may start out synchronous and only become async with time, so you it may
|
||||
* not be clear why you are seeing certain changes in behaviour.
|
||||
* <p/>
|
||||
* <p>
|
||||
* There are many ways to implement the Singleton. The first one is the eagerly initialized instance
|
||||
* in {@link IvoryTower}. Eager initialization implies that the implementation is thread safe. If
|
||||
* you can afford giving up control of the instantiation moment, then this implementation will suit
|
||||
* you fine.
|
||||
* <p/>
|
||||
* <p>
|
||||
* The other option to implement eagerly initialized Singleton is enum based Singleton. The example
|
||||
* is found in {@link EnumIvoryTower}. At first glance the code looks short and simple. However, you
|
||||
* should be aware of the downsides including committing to implementation strategy, extending the
|
||||
@ -47,16 +47,16 @@ import org.slf4j.LoggerFactory;
|
||||
* Overflow:
|
||||
* http://programmers.stackexchange.com/questions/179386/what-are-the-downsides-of-implementing
|
||||
* -a-singleton-with-javas-enum
|
||||
* <p/>
|
||||
* <p>
|
||||
* {@link ThreadSafeLazyLoadedIvoryTower} is a Singleton implementation that is initialized on
|
||||
* demand. The downside is that it is very slow to access since the whole access method is
|
||||
* synchronized.
|
||||
* <p/>
|
||||
* <p>
|
||||
* Another Singleton implementation that is initialized on demand is found in
|
||||
* {@link ThreadSafeDoubleCheckLocking}. It is somewhat faster than
|
||||
* {@link ThreadSafeLazyLoadedIvoryTower} since it doesn't synchronize the whole access method but
|
||||
* only the method internals on specific conditions.
|
||||
* <p/>
|
||||
* <p>
|
||||
* Yet another way to implement thread safe lazily initialized Singleton can be found in
|
||||
* {@link InitializingOnDemandHolderIdiom}. However, this implementation requires at least Java 8
|
||||
* API level to work.
|
||||
|
@ -24,9 +24,9 @@ package com.iluwatar.singleton;
|
||||
|
||||
/**
|
||||
* Double check locking
|
||||
* <p/>
|
||||
* <p>
|
||||
* http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
|
||||
* <p/>
|
||||
* <p>
|
||||
* Broken under Java 1.4.
|
||||
*
|
||||
* @author mortezaadi@gmail.com
|
||||
|
Reference in New Issue
Block a user