加锁后保证只有一个单例对象生成