简介

定义: 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。

单例类拥有一个私有构造函数,确保用户无法通过 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;
}
}

最新文章

  1. Hibernate 应用
  2. iOS学习06C语言结构体
  3. GIT 在本地保存账户和密码
  4. AFN 加Header
  5. SUID,SGID,Sticky Bit详解(转)
  6. jquery div层级选择器
  7. ASP.NET 之深入浅出Session和Cookie
  8. 【IOS学习基础】OC类的相关
  9. Template - Strategy
  10. java环境配置,试用和基本数据结构
  11. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
  12. 虚拟机下linux系统安装nginx
  13. Netty初探
  14. js new到底干了什么,new的意义是什么?
  15. 访问者模式 Visitor 行为型 设计模式(二十七)
  16. Ajax的面试题
  17. sql server 如何查询出数据库作业所有者的信息并完成批量替换
  18. 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法
  19. python中的IO模块
  20. HUE的安装

热门文章

  1. 内核补丁热更新ceph内核模块
  2. win10安装MySQL5.7.31 zip版
  3. python笔记(1)---数据类型
  4. web安全入门--入门条件
  5. Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程)
  6. 让mac电脑更简单运行Windows软件的CrossOver,优势知多少?
  7. leetcode187. 重复的DNA序列
  8. synchronized关键字的内存语义
  9. Nacos安装与启动教程
  10. 心跳event