volatile它只是一个变量修饰符,只能用来修饰变量不能修饰方法和代码块。
经典的用法:双重校验锁实现单例
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
第二个synchronized 使用
1、 分配内存空间
2、对象的初始化
3、singleton指向地址