package com.henu;
/*
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了。
而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
*/
public class Demo03_单例 {
public static void main(String[] args) {
Single s1 = Single.newInstance();
Single s2 = Single.newInstance();
System.out.println(s1 == s2);//true
SingleClass1 c1 = SingleClass1.getInstance();
SingleClass1 c2 = SingleClass1.getInstance();
System.out.println(c1 == c2);//true
}
}
//饿汉式
class Single{
//创建一个静态私有对象
private static Single INSTANCE = new Single();
//私有化构造函数
private Single() {};
//返回静态私有对象
public static Single newInstance() {
return INSTANCE;
}
}
//懒汉式
class SingleClass1{
//初始值为null
private static SingleClass1 INSTANCE = null;
private SingleClass1() {};
//直到真正需要该类的实例时,才创建,但必须保证线程安全
public static synchronized SingleClass1 getInstance(){
if (INSTANCE == null) {
INSTANCE = new SingleClass1();
}
return INSTANCE;
}
}
老汉式:
package Single;
public class Demo03 {
public static void main(String[] args) {
SingletonOld so1 = SingletonOld.so;
System.out.println(so1);
SingletonOld so2 = SingletonOld.so;
System.out.println(so2);
System.out.println(so1 == so2);//true
// SingletonOld.so = null;
}
}
class SingletonOld {
/*
1.私有化构造函数
2.将对象实例化为final
*/
private SingletonOld() {
}
public static final SingletonOld so = new SingletonOld();
}