1-5 单例模式
来源:互联网 发布:java redis队列使用 编辑:程序博客网 时间:2024/06/08 16:47
单例模式
- 单例模式
- 写在前边的话
- 定义
- 单线程下的单例模式
- 多线程下的单例模式
- 同步getInstance方法
- 双重检查加锁
- 急切实例化
- 单例模式
写在前边的话
单例模式是一个比较简单的小模式,常用它来管理共享的资源:线程池、缓存、对话框、处理偏好设置、注册表的的对象
定义
确保一个类只有一个实例,并提供一个全局访问点。
单线程下的单例模式
public class Singleton { private static Singleton singleton ; //构造器对外隐藏 当然也可以有带参的私有构造器 private Singleton(){} //外部代码通过Singleton.getInstance();就可以获得唯一的实例 public static Singleton getInstance(){ if (singleton == null) { singleton = new Singleton(); } return singleton;}
多线程下的单例模式
多线程时,下边的实例判断就会有问题
if (singleton == null) { singleton = new Singleton();}
可如下三种方式处理
同步getInstance()方法
public class Singleton { private static Singleton singleton ; private Singleton(){} //synchronize 弊端: 1 加同步,同步一个方法可能造成程序效率下降100倍 2 如果该实例已存在也会同步,这事没必要的 public static synchronize Singleton getInstance(){ if (singleton == null) { singleton = new Singleton(); } return singleton;}
双重检查加锁
public class Singleton { private static Singleton singleton ; private Singleton(){} public static Singleton getInstance(){ if (singleton == null) {// 判断有无必要加锁 synchronized (Singleton.class) { if (singleton == null) {// 这段时间是否已经被实例化 singleton = new Singleton(); } } } return singleton; }}
急切实例化
依赖JVM在加载这个类时马上创建唯一的实例。最好是 能这个实例一定被用到,不然 在加载时就初始化就浪费了
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; }}
阅读全文
1 0
- 1-5 单例模式
- 《5》单例模式
- 单例模式1
- 单例模式1
- (1) 单例模式
- 单例模式1
- 单例模式1
- 1、单例模式
- 单例模式1
- 1 单例模式
- 单例模式1
- 单例模式1
- 1单例模式
- 1,单例模式
- 1 单例模式
- (1)单例模式
- 1 单例模式 SingleTon
- (1)单例模式
- el和jstl
- 工厂模式
- Linux_Python收藏代码
- android studio 全套入门教学视频(点开即看)无需下载
- C的旅程系列之如何开始
- 1-5 单例模式
- CSS深入理解vertical-align和line-height的基友关系
- C++之引用类型
- Tensorflow一些常用基本概念与函数(四)
- Java基础语法3
- 备战考试
- java相关
- C#173课的主要内容
- javascript-->>排序