单例模式为什么同时用volatile和synchronized 加锁?为什么两次判空?
1.volatile在synchronized保证同步的前提下 避免了指令重排造成的问题
2.第一次判空是因为需要对象为空 才进行初始化的判断
第二次判空是因为synchronized锁住了类对象 如果在第一次判空后多线程操作将其初始化 那么未初始化的线程进入后会再创建一个对象造成重复
展开
评论