java设计模式之单例模式的四种实现方式

一、饿汉模式

 

package disignmodel;

public class HungrySingleton {

    private HungrySingleton() {

    }

    private static final HungrySingleton singleton = new HungrySingleton();

    public HungrySingleton getInstace() {
        return singleton;
    }
}

优点:①线程安全、简单;

缺点:①类一加载就实例化,提前占用系统资源,效率低;


二、懒汉模式之一

 

package disignmodel;

public class LazySingleton {

    private LazySingleton() {

    }

    private static LazySingleton singleton;

    public LazySingleton getInstace() {
        if (singleton == null) {
            singleton = new LazySingleton();
        }

        return singleton;
    }
}

缺点:①非线程安全;


三、懒汉模式之二

 

package disignmodel;

public class LazySingleton2 {

    private LazySingleton2() {

    }

    private static LazySingleton2 singleton;

    public synchronized LazySingleton2 getInstace() {
        if (singleton == null) {
            singleton = new LazySingleton2();
        }

        return singleton;
    }
}

优点:①线程安全;

缺点:每次都要加锁锁,效率低;


四、懒汉模式之三

 

package disignmodel;

public class LazySingleton3 {

    private LazySingleton3() {

    }

    private static LazySingleton3 singleton;

    public LazySingleton3 getInstace() {
        if (singleton == null) {
            synchronized (LazySingleton3.class) {
                if (singleton == null) {
                    singleton = new LazySingleton3();
                }
            }
        }

        return singleton;
    }
}

优点:①线程安全;②双重判断减少加锁次数;




你可能感兴趣的:(java常用设计模式)