I read many forums and posts about different style to implement single-tone pattern in java and seems \"Enum are the best way to implement singletone pattern in java\"!! I w
The first time a class is used, it gets loaded by the JVM and all of its static initialization is done. the enum members are static , so they're all going to be initialized.
Actually, classloader loads classes (sounds funny) only after you are accessing this classes first time. And only one reason to access enum-singleton class is to get it's instance.
That is why single-element enum type singletone in Java are called lazy - it's value is not initialized before you first time access it.
The reason the source you read said it's the easiest way to do lazy singletons is because it should just work. Try this:
public class LazyEnumTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("Sleeping for 5 seconds...");
Thread.sleep(5000);
System.out.println("Accessing enum...");
LazySingleton lazy = LazySingleton.INSTANCE;
System.out.println("Done.");
}
}
enum LazySingleton {
INSTANCE;
static { System.out.println("Static Initializer"); }
}
Here's the output I get in the console:
$ java LazyEnumTest
Sleeping for 5 seconds...
Accessing enum...
Static Initializer
Done.