当前位置 : 主页 > 编程语言 > c++ >

java中单例模式的最佳实践(延迟+性能)

来源:互联网 收集:自由互联 发布时间:2021-06-30
IODHSingleton.java package cn.lcl.pattern.singleton;/** * java中单例模式的最佳实践,既能够延迟加载,又能够保证性能。但是不适合于所有的OOP编程语言,它使用了静态内部类的方式 * 1.恶汉式 * 不
IODHSingleton.java
package cn.lcl.pattern.singleton;

/**
 * java中单例模式的最佳实践,既能够延迟加载,又能够保证性能。但是不适合于所有的OOP编程语言,它使用了静态内部类的方式
 * 1.恶汉式
 * 不管有没有使用这个类的对象,都会将其加载进内存。浪费内存空间,特别是一般单例对象的职责都是比较重的,会耗费大量的
 * 资源。
 * 2.饱汉式。
 * 优点是可以延迟加载,但是为了保证线程安全性。成员变量要加volatile变量,因为程序可能运行在多线程环境中,要保证
 * instance字段的原子性。但是原子性字段会丢失虚拟机的部分优化。而且每次通过getInstace()方法获取单例对象的时候要做if
 * 判断,耗费cpu资源。所以懒汉式的缺点是性能丢失。
 * 3.使用静态内部类来生成单例对象。(两者优点的结合)
 * Created by licho on 2017/8/15 0015.
 */
public class IODHSingleton {
    /**
     * 构造方法为私有
     */
    private IODHSingleton(){

    }

    /**
     * 利用了类的加载机制。当getInstance方法不被调用时,静态内部类就不会被加载进虚拟机,也就不会为静态成员变量
     * 分配空间初始化。这保证了延迟加载。
     * 当外部调用了getInstance方法时。类加载器将内部类加载进虚拟机,然后初始化静态域的过程本身是线程安全的。所以
     * 这里保证了性能。
     * @return
     */
    public static IODHSingleton getInstance(){
        return IODHSingletonInstance.instance;
    }
    public static class IODHSingletonInstance{
        public static final IODHSingleton instance=new IODHSingleton();
    }
}
网友评论