提前将对象准备好,加载到内存中
1.1 饿汉式介绍
是否Lazy初始化:否 (提前准备好对象)
是否多线程安全:是 (饿汉式只有一个实例,没有多线程)
描述:这种⽅式⽐较常⽤,但容易产⽣垃圾对象。 (可能创建出来的对象一直没有用)
优点:没有加锁,执⾏效率会提⾼。
缺点:类加载时就初始化,浪费内存。
它基于classloader机制避免了多线程的同步问题,不过instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中⼤多数都是调⽤getInstance()⽅法, 但是也不能确定有其他的⽅式(或者其他的静态⽅法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。
1.2 饿汉式案例
1.创建⼀个Java项⽬。
2.创建⼀个HungrySingleton类。
package com.设计模式.饿汉式;
public class HungrySingleton {
//设置为静态,实现全局访问 //提前将对象准备好,加载到内存中
private static HungrySingleton instance = new HungrySingleton();
//构造方法私有化目的是为了在其他类里不能创建该对象
private HungrySingleton(){}
//提供静态方法来访问类中的私有成员
public static HungrySingleton getInstance(){
return instance;
}
public void showMessage(){
System.out.println("创建instence成功,showMessage执行了");
}
}
3.从HungrySingleton类获取唯⼀的对象。
package com.设计模式.饿汉式;
public class Test_HungrySingleton {
public static void main(String[] args) {
HungrySingleton hungrySingleton = HungrySingleton.getInstance();
hungrySingleton.showMessage();
}
}
4.执⾏程序,输出结果。