Singleton.java implements a thread safe singleton instance creation for this class. Even if multiple threads are accessing this should create only one instance of class.
package hacking;
public class Singleton {
private Singleton(){
System.out.println(“I am Singleton”);
}
private static Singleton s = new Singleton();
public static Singleton getInstance(){
return s;
}
}
Test.java file hacking the Singleton class to create multiple instances.
package hacking;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws Exception {
Singleton s = Singleton.getInstance();
Constructor c[] = Singleton.class.getDeclaredConstructors();
c[0].setAccessible(true);
c[0].newInstance(null);
}
}
Here is the output of this program
$ java Test
I am Singleton
I am Singleton
The private constructor is called for second time also, that means the class is not singleton anymore.