单例模式
来源:互联网 发布:node forever log 编辑:程序博客网 时间:2024/05/16 08:12
1.单例模式的定义:保证一个类仅有一个实例,并一个访问它的全局访问点。
2.懒汉式:
public class Appconfig_lazy {private String a,b;private static Appconfig_lazy instance = null;public static synchronized Appconfig_lazy getInstance(){if (instance == null) { instance = new Appconfig_lazy(); } return instance;}public String getA() {return a;}public String getB() {return b;}private Appconfig_lazy(){readConfig();}private void readConfig() {// TODO Auto-generated method stubthis.a = "a";this.b = "b";System.out.println("----");}}3.恶汉式:
public class Appconfig_hun { private String a, b; private static Appconfig_hun instance = new Appconfig_hun(); public static Appconfig_hun getInstance() { return instance; } private Appconfig_hun() { readConfig(); } private void readConfig() { // TODO Auto-generated method stub this.a = "1"; this.b = "2"; } public String getA() { return a; } public String getB() { return b; }}3.命名方式:根据创建对象实例的时机,如果装载类的时候就创建叫做恶汉式;如果等到要用时再创建叫做懒汉式。
4.模式功能:保证类在运行时只会有一个实例。
5.模式范围:在Java虚拟机范围内,每个ClassLoader装载改类,都会产生实例。
6.懒汉式包含了延迟加载和缓存的思想。
7.优缺点:①时间空间:懒汉式是时间换取空间;恶汉式是空间换取时间。
②线程安全:不加同步的懒汉式不安全,可能导致并发。恶汉式安全。
③懒汉式单使用synchronized会降低访问速度。
8.懒汉式的优化,避免性能的过多影响:①双重检查加锁:使用关键词volatile。不是每次进入getInstance都会同步,而是先不同步,进入方法过后,先检查实例是否存在,如果不存在再进入同步块,这是第一重检查。进入同步块后再次检查实例是否存在,不存在就创建实例,这是第二重检查。
public class Appconfig_lazy_double {private String a, b;private volatile static Appconfig_lazy_double instance = null;public static Appconfig_lazy_double getInstance() {if (instance == null) {synchronized (Appconfig_lazy_double.class) {instance = new Appconfig_lazy_double();}}return instance;}public String getA() {return a;}public String getB() {return b;}private Appconfig_lazy_double() {readConfig();}private void readConfig() {// TODO Auto-generated method stubthis.a = "a";this.b = "b";System.out.println("----");}}②Lazy initialzation holder class:结合类级内部类和多线程缺省同步锁。
public class Appconfig_lazy {private String a,b;private static class holder{private static Appconfig_lazy instance = new Appconfig_lazy();}public static synchronized Appconfig_lazy getInstance(){return holder.instance;}public String getA() {return a;}public String getB() {return b;}private Appconfig_lazy(){readConfig();}private void readConfig() {// TODO Auto-generated method stubthis.a = "a";this.b = "b";System.out.println("----");}}9.单例模式的本质:控制实例数量。
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- Struts2学习笔记(配置文件和参数接受)
- openstack之网络分析
- js自定义函数时间显示(重构时间函数)
- 一个炫字都不够??!!!手把手带你打造3D自定义view
- formValidator一些常用的验证
- 单例模式
- Java 中 float 与 double 的区别
- 通往WinDbg的捷径(一)
- 【leetcode】【204】Count Primes
- #345 Div2 D. Image Preview
- 利用opencv检测出矩形
- Linux命令之文件系统(五)
- Python 学习历程- 看我一步一步走过来 未完待续。。。
- jquery Ajax标准写法