在单例模式中:double checked locking模式下
做同步需要锁住代码段
方法如下:
public static DoubleCheckSingleton getInstance(){
if(instance == null){
synchronized(DoubleCheckSingleton.class){
if(instance == null){instance = new DoubleCheckSingleton();}
}
}
return instance;
}
其中:
class与this的几种情况:
synchronized(class)
synchronized(this)
线程各自获取monitor,不会有等待。
synchronized(this)
如果不同线程监视同一个实例对象,就会等待;如果不同的实例,不会等待。
synchronized(class)
如果不同线程监视同一个实例或者不同的实例对象,都会等待。
静态方法必须锁住class才能保证线程安全;