Java两种单例(Java并发编程的艺术)
程序员文章站
2024-03-13 22:56:22
...
本文作为自己的备忘录。
基于volatile(可以防止指令重排序)和synchronized的双重检查。还可以对非static的实例字段进行初始化。
public class SafeDoubleCheckedLocking {
private volatile static Instance instance;
public static Instance getInstance() {
if (instance == null) {
synchronized (Instance.class) {
if (instance == null) {
instance = new Instance();
}
}
}
return instance;
}
}
基于JVM类加载机制的方式(把锁的管理交给了JVM来处理),代码简洁:
public class InstanceFactory {
private static class InstanceHolder {
public static Instance instance = new Instance();
}
public static Instance getInstance() {
return InstanceHolder.instance;
}
}
以上两个例子,Instance可以是任何类,包括本身(是我之前对单例的理解太狭隘了)