懒汉式与饿汉式单例类的区别主要体现在实例化时机、线程安全性和资源利用效率上。以下是详细介绍:
getInstance()
方法时才进行实例化,实现了延迟加载,可以有效减少资源浪费。getInstance()
方法上加synchronized
关键字或使用双重检查锁定(Double-Checked Locking)来确保线程安全。public class HungryStyle {
private static final HungryStyle instance = new HungryStyle();
private HungryStyle() {}
public static HungryStyle getInstance() {
return instance;
}
}
public class LazyStyle {
private static LazyStyle instance;
private LazyStyle() {}
public static synchronized LazyStyle getInstance() {
if (instance == null) {
instance = new LazyStyle();
}
return instance;
}
}
综上所述,懒汉式单例类在实例化时机、线程安全性和资源利用效率方面与饿汉式单例类有所不同。懒汉式单例类通过延迟加载实例化对象,提高了资源利用效率,但需要注意线程安全问题。饿汉式单例类则在实例化时就已经完成了对象的创建,线程安全,但可能会造成一定的资源浪费。