应用场景
只需要一个对象,如:配置文件、工具类、线程池、缓存对象、日志对象等
饿汉模式

public class SingleTon {
/**1.私有化构造函数,使类不被外部实例化*/
private SingleTon() {
}
/**2.私有化实例对象*/
private static SingleTon instance = new SingleTon();
/**外部获取对象方法*/
public static SingleTon getInstance() {
return instance;
}
}

public class TestSingleTon {
public static void main(String[] args) {
SingleTon s1 = SingleTon.getInstance();
SingleTon s2 = SingleTon.getInstance();
System.out.println(s1 == s2);
}
}
懒汉模式-线程不安全

public class SingleTon {
/**1.私有化构造函数,使类不被外部实例化*/
private SingleTon() {
}
/**2.私有化实例对象*/
private static SingleTon instance = null;
/**外部获取对象方法*/
public static SingleTon getInstance() {
if (instance == null) {
instance = new SingleTon();
}
return instance;
}
}
懒汉模式-线程安全

public class SingleTon {
/**1.私有化构造函数,使类不被外部实例化*/
private SingleTon() {
}
/**2.私有化实例对象*/
private static SingleTon instance = null;
/**外部获取对象方法*/
public static SingleTon getInstance() {
/**当instance不为null时,线程不用等待,直接绕过锁*/
if (instance == null) {
/**线程同步*/
synchronized(SingleTon.class) {
if (instance == null) {
instance = new SingleTon();
}
}
}
return instance;
}
}
饿汉模式与懒汉模式的区别
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢
1223

被折叠的 条评论
为什么被折叠?



