Java 单例模式
2016-03-03 15:48
483 查看
使用静态内部类实现单例模式
在这段代码中,因为SingletonClass没有static的属性,因此并不会被初始化。直到调用getInstance()的时候,会首先加载SingletonClassInstance类,这个类有一个static的SingletonClass实例,因此需要调用SingletonClass的构造方法,然后getInstance()将把这个内部类的instance返回给使用者。由于这个instance是static的,因此并不会构造多次。
由于SingletonClassInstance是私有静态内部类,所以不会被其他类知道,同样,static语义也要求不会有多个实例存在。并且,JSL规范定义,类的构造必须是原子性的,非并发的,因此不需要加同步块。同样,由于这个构造是并发的,所以getInstance()也并不需要加同步。
public class SingletonClass { private static class SingletonClassInstance {// inner static class private static final SingletonClass instance = new SingletonClass(); } public static SingletonClass getInstance() { return SingletonClassInstance.instance; } private SingletonClass() { } }
在这段代码中,因为SingletonClass没有static的属性,因此并不会被初始化。直到调用getInstance()的时候,会首先加载SingletonClassInstance类,这个类有一个static的SingletonClass实例,因此需要调用SingletonClass的构造方法,然后getInstance()将把这个内部类的instance返回给使用者。由于这个instance是static的,因此并不会构造多次。
由于SingletonClassInstance是私有静态内部类,所以不会被其他类知道,同样,static语义也要求不会有多个实例存在。并且,JSL规范定义,类的构造必须是原子性的,非并发的,因此不需要加同步块。同样,由于这个构造是并发的,所以getInstance()也并不需要加同步。
相关文章推荐
- Spring定时任务异常
- 深入分析Java的序列化与反序列化
- Java中XML格式的字符串4读取方式的简单比较
- 细说Java(二)
- Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse
- Java类加载器(自定义类加载器)
- Spring Task
- Java对象的序列化与反序列化
- Java I/O 模型的演进
- sonarQube的配置和使用(在eclipse下载插件)
- Java高级---多线程
- Java对图片缩放,旋转,增加水印,裁剪
- IT十八掌作业_java基础第二天_进制转换原理和补码存储方式
- Struts2的声明式异常源码分析
- 正则表达式【java】
- Java源码阅读之String
- Java并发编程:深入剖析ThreadLocal
- Java多线程
- JAVA日志工具类
- struts、hibernate、spring实现驾校管理系统