单列模式
2024-02-27 本文已影响0人
小动乾坤

定义:在运行时数据区里面,指定类A的实列对象有且只能有一个
提示:饿汉式和懒汉式的区分标准:目标类A要设计为单列,类A加载的时候实列对象就创建了,饿汉式,需要类A进行相应的方法调用才才创建对象,懒汉式
饿汉式:类加载时创建实列对象
静态代码块写法
组合静态成员变量写法
优点:通过类加载过程规避并发问题
缺点:类加载和类的对象使用并不是绑定在一起的,类加载的时候初始化实列对象,后续如果用不上,本质就是出现了内存内存泄漏问题
懒汉式:实列获取方法调用时才有机会触发对象的创建过程
线程安全的写法但推荐使用的写法


静态内部类写法代码特征:
1.单列目标类A构造方法私有化
2.类A内嵌一个类B,B静态组合类A
3.类A提供方法,这个方法直接访问类B静态组合的成员变量A的实列对象
类A加载时单列对象未实列化,类A方法调用时触发内部类B加载,B加载规避并发问题并初始化实列对象

线程安全但不推荐使用的写法


非线程安全的写法只能单线程下使用
暴力判断对象是否创建过,没有创建的话创建并返回,不做任何并发处理