https://www.machinet.net/tutorial-eng/lazy-vs-eager-initialization-in-java-singleton