java设计模式-单例模式
来源:互联网 发布:泸州古蔺网络问政平台 编辑:程序博客网 时间:2024/06/05 07:04
单例模式:
单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。
单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
单例模式是结构最简单的设计模式一,在它的核心结构中只包含一个被称为单例类的特殊类。
懒汉式(线程不一定安全)
- 为什么说线程不一定安全?在高并发情况下不能保证数据一致,线程安全的在下面讲
- (1)由于每次使用new关键字来实例化Singleton 类时都将产生一个新对象,为了确保Singleton 实例的唯一性,我们需要禁止类的外部直接使用new来创建对象,因此需要将Singleton 的构造函数的可见性为private
- (2)将构造函数改为private修饰后该如何创建对象呢?不要着急,虽然类的外部无法再使用new来创建对象,但是在Singleton 的内部还是可以创建的,可见性只对类外有效。因此,我们可以在Singleton 中创建并保存这个唯一实例。为了让外界可以访问这个唯一实例,需要在Singleton类 中定义一个静态的Singleton 类型的私有成员变量
- (3)为了保证成员变量的封装性,我们将Singleton 类型的single的可见性设置为private,但外界该如何使用该成员变量并何时实例化该成员变量呢?答案是增加一个公有的静态方法Singleton getInstance(),
//懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { //1 私有的构造器 private Singleton() {} //2 私有 静态 Singleton类型 成员变量 private static Singleton single=null; //3 公有静态方法 public static Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } }
饿汉式(线程不一定安全)
- 不管有么有被被人使用,先把对象创建出来
//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { //1 私有构造器 private Singleton1() {} //2 直接创建私有 静态(可以不是final)对象 private static final Singleton1 single = new Singleton1(); //3 静态方法 public static Singleton1 getInstance() { return single; } }
懒汉式(线程安全的)
- 线程安全常用方法是加锁.这里使用同步锁机制(synchronized )
- 把锁加在方法上
public class Singleton { //1 私有的构造器 private Singleton() {} //2 私有 静态 Singleton类型 成员变量 private static Singleton single=null; //3 公有静态方法 (加入同步锁) public static synchronized Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } }
什么是线程安全
- 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。
阅读全文
1 0
- java 设计模式,单例设计模式
- java设计模式-单例设计模式
- java设计模式-单例设计模式
- Java设计模式 单例设计模式
- Java设计模式------单例设计模式
- java设计模式----->单例设计模式
- java设计模式:单例设计模式
- java设计模式-----单例设计模式
- Java设计模式----单例设计模式
- java设计模式-单例设计模式
- java设计模式:单例设计模式
- java 设计模式-单例设计模式
- Java设计模式--单例设计模式
- java设计模式---单例设计模式
- Java设计模式-单例设计模式
- JAVA设计模式:单例设计模式
- java-单例设计模式
- Java设计|单例模式
- nginx中文文档、nginx在Windows,linux下启动和停止等命令
- CC2530中的源地址匹配
- 贪心:区间相交问题
- 4.1的三个小题目
- 逃离迷宫-bfs
- java设计模式-单例模式
- 利用位向量实现海量数据存储
- 初次加入到了编程的大家庭
- 连续总结第二十四天
- Jmock 原理简单说明
- 【Unity Shader入门精要】— 中级篇
- 小厚的三角形(SDUT 3559)
- 深入解析Linux 常用命令--ls
- c++:继承相关的要点热点,以及菱形继承的底层实现