1.饿汉式(预先创建好对象,不存在线程安全问题)
public class Main{
public static void main(String[] args){
Singleton singleTon1 = Singleton.getInstance();
Singleton singleTon2 = Singleton.getInstance();
System.out.println(singleTon1 == singleTon2);
}
}
class Singleton{
//1.私有化构造函数,防止外部通过构造函数创建对象。
private Singleton(){}
//2.在类内部创建对象,预先创建对象。
private static Singleton singleTon = new Singleton();
//3.给外部提供访问该对象的公共接口。
public static Singleton getInstance(){
return singleTon;
}
}
2.懒汉式(调用时再创建对象,存在线程安全问题)
public class Main{
public static void main(String[] args){
Singleton singleTon1 = Singleton.getInstance();
Singleton singleTon2 = Singleton.getInstance();
System.out.println(singleTon1 == singleTon2);
}
}
class Singleton{
//1.私有化构造函数,防止外部通过构造函数创建对象。
private Singleton(){}
//2.在类内部创建对象,预先不创建对象。
private static Singleton singleTon = null;
//3.给外部提供访问该对象的公共接口,外部接口调用的时候再创建对象。
public static Singleton getInstance(){
if(singleTon == null){
singleTon = new Singleton();
}
return singleTon;
}
}