确保一个类只有一个实例,并且只有一个全局访问点。如果使用多个类加载器,可能导致单例模式失效而产生多个实例。单例不允许继承,全局变量也会产生多个实例. 单例模式和工厂模式,抽象工程模式 其实都是为了创建对象,但是单例模式只能产生一个对象实例,而工厂模式可以产生不同类型的对象,抽象工厂模式却能批量产生不同类型的对象。单例模式产生的对象有些孤独,是寡者,没有兄弟,一般对特别重要的资源才可能用到单例模式,这些资源只有一份,就如皇帝,太阳只有一个,皇帝是不希望其他人与他同时也是皇帝的,哪怕是自己的兄弟姐妹。
- synchronized 对线程同步有作用,但是会降低性能。如果对性能要求不高采用此办法
public class SynchronizedSingleton {
private int i=0;
private static SynchronizedSingleton uninstance=null;
private void SynchronizedSingleton() {
}
public static synchronized SynchronizedSingleton getInstance() {
if (uninstance == null)
uninstance= new SynchronizedSingleton();
return uninstance;
}
public void hello(){
System.out.println(++i);
}
}
- 使用"急切"创建实例,而不用延迟实例化的做法。 此法负担不很繁重。此法依赖JVM加载这个类时马上创建唯一单件实例。JVM保证在任何线程访问uniqueInstance静态变量之前,一定先创建此 实例。
public class EagerlySingleton {
private int i=0;
private static EagerlySingleton uniqueInstance=new EagerlySingleton();
private EagerlySingleton(){}
public static EagerlySingleton getInstance(){
return uniqueInstance;
}
public void hello(){
System.out.println(++i);
}
}
- 用“双重检查加锁”,在getInstance中减少使用同步。此方法依赖jdk1.5
public class DoubleCheckedSynchronizedSingleton {
private int i = 0;
private volatile static DoubleCheckedSynchronizedSingleton uninstance = null;
private void SynchronizedSingleton() {
}
public static DoubleCheckedSynchronizedSingleton getInstance() {
if (uninstance == null) {
synchronized (DoubleCheckedSynchronizedSingleton.class) {
if (uninstance == null) {
uninstance = new DoubleCheckedSynchronizedSingleton();
}
}
}
return uninstance;
}
public void hello() {
System.out.println(++i);
}
}
分享到:
相关推荐
Java一共有23种设计模式,单例模式就是指一个类只有一个实例,且该类能自行创建这个实例的一种模式。可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。比如咱们电脑...
NULL 博文链接:https://xiandaoyan.iteye.com/blog/663348
移动应用 UI 设计, 读书笔记, 记录摘取书籍中重点信息,有助于页面设计,原型设计等
设计模式1,包含了设计模式的基本介绍,以及状态机模式的读书笔记
《C++20设计模式》学习笔记-第5章单例模式
USB读书笔记 USB读书笔记 USB读书笔记 USB读书笔记
【课堂笔记】单例模式详解
JAVA模式笔记,JAVA模式的读书笔记,JAVA模式的读书笔记。
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》...
计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇
第一次校验的时候没有同步锁,如果已经实例化了,直接返回即可,省下了同步锁要消耗的资源 第二次校验是因为第一次校验没有同步锁,所以多个线程都可能进入,同步块内二重
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
毕业论文读书笔记格式,教会你怎么写毕业论文读书笔记格式
HeadFirst设计模式 读书 笔记
说到单例模式,大家第一反应应该是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也是保证一个类只有一个实例的一种实现方法罢了(设计模式其实是帮助我们解决实际开发...