单例模式——静态内部类实现(推荐使⽤)
中单例模式是⼀种常见的设计模式,单例模式的写法有好⼏种,这⾥主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
特点:
1、单例类只能有⼀个实例。
2、单例类必须⾃⼰创建⾃⼰的唯⼀实例。
3、单例类必须给所有其他对象提供这⼀实例。
使⽤场景:
单例模式确保某个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、⽇志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应⽤都或多或少具有资源管理器的功能。每台计算机可以有若⼲个打印机,但只能有⼀个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若⼲通信端⼝,系统应当集中管理这些通信端⼝,以避免⼀个通信端⼝同时被两个请求同时调⽤。总之,选择单例模式就是为了避免不⼀致状态,避免政出多头。
静态内部类实现单例代码:
st;
public class Singleton_InnerClass {
//静态内部类
单例模式的几种实现方式private static class SingletonHolder {
//静态初始化器机制初始化本数据(保证了同步控制,线程安全)
private static Singleton_InnerClass instance = new Singleton_InnerClass();
}
//私有构造⽅法
private Singleton_InnerClass() {}
//获得对象实例
public static Singleton_InnerClass getInstance() {
return SingletonHolder.instance;
}
}
优点:
1.采⽤静态内部类的⽅式,作为单例,直接⽤classLoader(jvm类加载机制)进⾏处理异步加锁问题,并减少内存消耗
2.懒加载(饿汉式),即延迟加载。
3.线程安全。
分析:
1.⽤静态内部类只有在第⼀次使⽤才会被加载。
2.为解决并发,主要通过使⽤synchronized来加互斥锁,进⾏同步控制。但某些情况下,jvm已经隐含的执⾏了同步,这些情况下就不⽤⾃⼰再来进⾏同步控制了。
|
1>由静态初始化器(在静态字段上或static{}块中的初始化其)初始化数据时。
2>访问final字段时。
3>在创建线程之前创建对象时。
4>线程可以看到他将要处理的对象时。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论