欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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可以是任何类,包括本身(是我之前对单例的理解太狭隘了)

 

相关标签: 备忘