simplest singleton
add synchronized to deal with multithreading
change to eagerly singleton.
using double check