A singleton is to ensure there is one, and only ONE instance of that object present in your application. It can come in handy when for example to ensure there is only ONE audio class instance, so there can't be two instances asking the audio device to play two different things.
Though in practise, a singleton isn't used that much, it is handy to know it exists if you do ever come across the need of one.
The initialization method is than used to ensure only ONE instance can be created. There are several ways of ensuring this, if you DO NOT protect the instance from being created more than once, 2 threads could enter the class at the same time and you could end up with two instances of this class. Which would go against what you are trying to achieve.
Take a look at this: http://en.wikipedia.org/wiki/Singleton_pattern