diff --git a/singleton/src/main/java/com/iluwatar/App.java b/singleton/src/main/java/com/iluwatar/App.java index 2d7fb26e9..4a3fcf361 100644 --- a/singleton/src/main/java/com/iluwatar/App.java +++ b/singleton/src/main/java/com/iluwatar/App.java @@ -1,10 +1,10 @@ package com.iluwatar; /** - * + * * Singleton pattern ensures that the class (IvoryTower) can have only one * existing instance and provides global access to that instance. - * + * */ public class App { @@ -15,5 +15,12 @@ public class App { System.out.println("ivoryTower1=" + ivoryTower1); System.out.println("ivoryTower2=" + ivoryTower2); + ThreadSafeLazyLoadedIvoryTower threadSafeIvoryTower1 = ThreadSafeLazyLoadedIvoryTower + .getInstance(); + ThreadSafeLazyLoadedIvoryTower threadSafeIvoryTower2 = ThreadSafeLazyLoadedIvoryTower + .getInstance(); + System.out.println("threadSafeIvoryTower1=" + threadSafeIvoryTower1); + System.out.println("threadSafeIvoryTower2=" + threadSafeIvoryTower2); + } } diff --git a/singleton/src/main/java/com/iluwatar/SingletonClass.java b/singleton/src/main/java/com/iluwatar/SingletonClass.java deleted file mode 100644 index 7e1de3844..000000000 --- a/singleton/src/main/java/com/iluwatar/SingletonClass.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iluwatar; - -public class SingletonClass { - - private static SingletonClass singletonInstance = null; - - public synchronized static SingletonClass getSingleton() { - /* - * The instance gets created only when it is called for first time. - * Lazy-loading - */ - if (singletonInstance == null) { - singletonInstance = new SingletonClass(); - } - - return singletonInstance; - } -} diff --git a/singleton/src/main/java/com/iluwatar/ThreadSafeLazyLoadedIvoryTower.java b/singleton/src/main/java/com/iluwatar/ThreadSafeLazyLoadedIvoryTower.java new file mode 100644 index 000000000..9cdadd85a --- /dev/null +++ b/singleton/src/main/java/com/iluwatar/ThreadSafeLazyLoadedIvoryTower.java @@ -0,0 +1,23 @@ +package com.iluwatar; + +/** + * + * Thread-safe Singleton class. + * + */ +public class ThreadSafeLazyLoadedIvoryTower { + + private static ThreadSafeLazyLoadedIvoryTower instance = null; + + public synchronized static ThreadSafeLazyLoadedIvoryTower getInstance() { + /* + * The instance gets created only when it is called for first time. + * Lazy-loading + */ + if (instance == null) { + instance = new ThreadSafeLazyLoadedIvoryTower(); + } + + return instance; + } +}