diff --git a/singleton/pom.xml b/singleton/pom.xml
index e3d8f06e2..038d6fdac 100644
--- a/singleton/pom.xml
+++ b/singleton/pom.xml
@@ -38,5 +38,9 @@
junit-jupiter-engine
test
+
+ junit
+ junit
+
diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java
index a7557fda3..6c17f7c3f 100644
--- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java
+++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java
@@ -35,12 +35,16 @@ public final class ThreadSafeDoubleCheckLocking {
private static volatile ThreadSafeDoubleCheckLocking instance;
+ private static boolean flag = true;
+
/**
* private constructor to prevent client from instantiating.
*/
private ThreadSafeDoubleCheckLocking() {
// to prevent instantiating by Reflection call
- if (instance != null) {
+ if (flag) {
+ flag = false;
+ } else {
throw new IllegalStateException("Already initialized.");
}
}
diff --git a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java
index 1d00d9f8f..6286b09fb 100644
--- a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java
+++ b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java
@@ -22,6 +22,11 @@
*/
package com.iluwatar.singleton;
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
/**
* Date: 12/29/15 - 19:26 PM
*
@@ -36,4 +41,15 @@ public class ThreadSafeDoubleCheckLockingTest extends SingletonTest