Java Language Enums Implement Singleton pattern with a single-element enum


Enum constants are instantiated when an enum is referenced for the first time. Therefore, that allows to implement Singleton software design pattern with a single-element enum.

public enum Attendant {


    private Attendant() {
        // perform some initialization routine

    public void sayHello() {

public class Main {

    public static void main(String... args) {
        Attendant.INSTANCE.sayHello();// instantiated at this point

According to "Effective Java" book by Joshua Bloch, a single-element enum is the best way to implement a singleton. This approach has following advantages:

  • thread safety
  • guarantee of single instantiation
  • out-of-the-box serialization

And as shown in the section implements interface this singleton might also implement one or more interfaces.