单例模式分为:饿汉模式和懒汉模式
懒汉模式:非线程安全
public class Singleton1 {
// 构造函数私有化
private Singleton1() {
};
// 私有对象
private static Singleton1 singleton = new Singleton1();
// 得到私有对象
public static Singleton1 getInstance() {
return singleton;
}
}
饿汉模式:线程安全
public class Singleton2 {
// 构造函数私有化
private Singleton2() {
};
// 私有对象
private static Singleton2 singleton;
// 得到私有对象
public static Singleton2 getInstance() {
if (null == singleton) {
singleton = new Singleton2();
}
return singleton;
}
}
测试类:
public class Test {
/**
* 饿汉模式:加载速度快、调用慢需要先创建类、线程安全
* 懒汉模式:加载速度慢、调用快开始创建类、线程不安全
* @param args
*/
public static void main(String[] args) {
Singleton1 s1 = Singleton1.getInstance();
Singleton1 s2 = Singleton1.getInstance();
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if (s1 == s2) {
System.out.println("s1和s2相同!");
} else {
System.out.println("s1和s2不同");
}
if (s3 == s4) {
System.out.println("s3和s4相同!");
} else {
System.out.println("s3和s4不同");
}
}
}