[置顶] 单例模式——静态内部类实现(推荐使用)
2017-08-18 13:52
267 查看
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。特点:1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
使用场景:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
静态内部类实现单例代码:
<4000
/strong>
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; } }
[b]优点:
1.采用静态内部类的方式,作为单例,直接用classLoader(jvm类加载机制)进行处理异步加锁问题,并减少内存消耗
2.懒加载(饿汉式),即延迟加载。
3.线程安全。
分析:
1.用静态内部类只有在第一次使用才会被加载。
2.为解决并发,主要通过使用synchronized来加互斥锁,进行同步控制。但某些情况下,jvm已经隐含的执行了同步,这些情况下就不用自己再来进行同步控制了。
|
1>由静态初始化器(在静态字段上或static{}块中的初始化其)初始化数据时。
2>访问final字段时。
3>在创建线程之前创建对象时。
4>线程可以看到他将要处理的对象时。
相关文章推荐
- 设计模式之使用静态块,静态内部类,枚举类实现单例模式
- 使用静态内部类实现延迟加载单例模式
- 使用静态内部类实现单例设计模式
- [置顶] 【设计模式】使用unity实现观察者模式(delegate,event)
- 使用静态内部类实现单例模式
- 不要在DEBUG模式下使用STL实现"复杂的"算法
- 使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 1 部分: 实现调用模式
- 使用ASP.Net Forms模式实现WebService身份验证
- 使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 2 部分: 实现接收模式
- 使用js实现observer模式
- 使用ASP.Net Forms模式实现WebService身份验证
- 使用观察者模式实现Java应用程序设计MVC模式
- 使用ASP.Net Forms模式实现WebService身份验证
- 使用ASP.Net Forms模式实现WebService身份验证
- 使用GreyBox实现Ajax模式窗口
- 使用cfengine来实现服务器的自动化配置 推荐
- 在C++中使用事件回调机制(通过Observer模式、函数指针等实现)
- 收藏——CodeProject - 使用特性(attributes)和激活机制来实现工厂模式
- 使用CSS+JavaScript实现可拖动的窗口的源代码(推荐)
- 使用正则表达式实现模式图片新闻.ASP