Then it's ok to not have the field be final, but then you shouldn't initialize it upon declaring. If you initialize a singleton when you declare it, it's most logical to make it final.
But in your code it is not wise to make it final It does suffer from one possible problem: if multiple threads access the method at the same time, it is possible to create two instances. You'll need some form of synchronization, the simplest being to just synchronize the entire method.
above code can be considered when you have multithreade enviornment. you need to add some synchronization check in your getinstance method ,which will prevent race condition. lazy creation of object gives you better performance when you do not require the object frequently.There it gives performance benefit.
Examples of singleton , Runtime class in java is singleton,Printer,there are other several examples of singleton.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus