Object declaration
There are a few ways to declare singletons in Java. Here is the most common way to define a class that has a private constructor and retrieves instances via a static factory method:
public class Singleton { private Singleton() { } private static Singleton instance; public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
The preceding code works fine for a single thread, but it's not thread-safe, so in some cases two instances of Singleton
can be created. There are a few ways to fix it. We can use the synchronized
block, presented as follows:
//synchronized public class Singleton { private static Singleton instance = null; private Singleton(){ } private synchronized static void createInstance() { if (instance == null) { ...