单例模式——静态内部类实现(推荐使用)

Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

使用场景:

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

静态内部类实现单例代码:

package com.test;

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>线程可以看到他将要处理的对象时。

    原文作者:路边捡了片面包
    原文地址: https://blog.csdn.net/chuangsun/article/details/77368683
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞