Java设计模式(一)——单例模式
2024-09-06 16:53:45
简介
定义: 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
单例类拥有一个私有构造函数,确保用户无法通过 new 来直接实例化它。类中包含一个静态私有成员变量与静态公有的工厂方法,该方法负责检验实例的存在性,如果不存在久实例化自己,然后存储在静态成员变量中,确保只有一个实例类被创建。
- 饿汉模式:在类被加载的时候将自己实例化,无需考虑多线程并发冲突的问题。初始化加载的时间可能会较长。优点是线程安全,执行效率高;缺点是浪费内存,容易产生垃圾。
- 懒汉模式:类在第一次使用的时候创建,需要通过双重检查锁定等机制防止多线程冲突,导致系统性能降低。优点是不浪费内存,缺点是需要保证线程安全,效率低一点。
双重检查锁存在问题: 当第一个判断得到不为null的时候,对象可能还没有完成初始化。对象的初始化和内存地址分配可能会被重排序,所以讲instance声明为volatile就不会发生重排序《Java并发编程的艺术》
代码
public class SingletonEH {
private static SingletonEH instance = new SingletonEH();
private SingletonEH (){}
public static SingletonEH getInstance() {
System.out.println("instance:"+instance);
System.out.println("加载饿汉式....");
return instance;
}
}
public class SingletonLHsyn {
private volatile static SingletonLHsyn instance;
private SingletonLHsyn (){
System.out.println("加载懒汉式....");
}
public static SingletonLHsyn getInstance() {
if (instance == null) {
synchronized(SingletonLHsyn.class) {
if (instance == null) {
instance = new SingletonLHsyn();
}
}
}
return instance;
}
}
最新文章
- Hibernate 应用
- iOS学习06C语言结构体
- GIT 在本地保存账户和密码
- AFN 加Header
- SUID,SGID,Sticky Bit详解(转)
- jquery div层级选择器
- ASP.NET 之深入浅出Session和Cookie
- 【IOS学习基础】OC类的相关
- Template - Strategy
- java环境配置,试用和基本数据结构
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
- 虚拟机下linux系统安装nginx
- Netty初探
- js new到底干了什么,new的意义是什么?
- 访问者模式 Visitor 行为型 设计模式(二十七)
- Ajax的面试题
- sql server 如何查询出数据库作业所有者的信息并完成批量替换
- 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法
- python中的IO模块
- HUE的安装