enum singleton
added comment
double check locking
singleton