理解:单例模式下,对象在程序加载或者第一次使用便被初始化,成为唯一全局变量,在单线程或者多线程情况下,所有线程取到单例对象都是相同,若对单例对象进行修改,在其他线程下对于单例对象也是同样变化的。
没有理解错误的话,在springboot容器启动时,spring容器对象是单例的,我们可以通过单例spring容器来获取容器内部的各自对象和监听事件,在比如我们历史上大部分时间皇帝都是单例唯一的,故此在程序上设计如下,在皇帝对象构造方法是private私有化的,同时创建单例构造方法在首次使用时候初始化,但是在多线程模式下可能会实例化多个,故此可以使用静态块在程序加载便初始化单例对象(饿汉式)。
注意:synchronized同步关键词,线程安全;单例模式,可节约CPU和内存;三层模式下的service和dao;
public class Emperor {
private static Emperor emperor = null;
private Emperor() {
}
//懒汉式
public static Emperor getInstance() {
if(emperor == null) {
emperor = new Emperor();
}
return emperor;
}
public static void emperorInfo(){
System.out.println("我是单例皇帝");
}
}
public class TestSingleton {
private static Emperor emperor;
public static void main(String[] args) {
emperor = emperor.getInstance();
emperor.emperorInfo();
}
}