package com.dounion;
/**
* 单例模式
*/
public class SingletonTest {
public static void main(String[] args) {
Singleton1 instance1 = Singleton1.getInstance();
Singleton1 instance2 = Singleton1.getInstance();
System.out.println("懒汉式1 test:" + (instance1 == instance2));
Singleton2 instance3 = Singleton2.getInstance();
Singleton2 instance4 = Singleton2.getInstance();
System.out.println("懒汉式2 test:" + (instance3 == instance4));
Singleton3 instance5 = Singleton3.getInstance();
Singleton3 instance6 = Singleton3.getInstance();
System.out.println("饿汉式 test:" + (instance5 == instance6));
}
}
//线程不安全 懒汉式1
class Singleton1 {
private static Singleton1 instance = null;
public static Singleton1 getInstance() {
if (instance == null) {
instance = new Singleton1();
}
return instance;
}
}
//线程安全 懒汉式2 (double checked lock)
class Singleton2 {
private static Singleton2 instance = null;
public static Singleton2 getInstance() {
if (instance == null) {
synchronized (Singleton2.class) {
if (instance == null) {
instance = new Singleton2();
}
}
}
return instance;
}
}
//饿汉式 不会出现线程安全问题
class Singleton3 {
private static Singleton3 instance = new Singleton3();
public static Singleton3 getInstance() {
return instance;
}
}