推荐使用饿汉式,二者区别在于:从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建。
代码:
public class SingletonDemo {
public static void main(String args[]) {
Singleton1 s1 = Singleton1.getInstance();
s1.print();
Singleton1 ss1 = Singleton1.getInstance();
System.out.println(s1 == ss1);
Singleton2 s2 = Singleton2.getInstance();
s2.print();
}
}
class Singleton1 {
private static Singleton1 s = new Singleton1();
private Singleton1() {}
public static Singleton1 getInstance() {
return s;
}
public void print() {
System.out.println("饿汉式单例设计模式");
}
}
class Singleton2 {
private static Singleton2 s = null;
private Singleton2() {}
public static Singleton2 getInstance() {
if(s == null) {
s = new Singleton2();
}
return s;
}
public void print() {
System.out.println("懒汉式单例设计模式");
}
}
运行结果: