单例模式可是使用频率较高的了先上个图
大概的几种单例模式
单例模式分为两种一种是饿汉式一种是懒汉式 其中饿汉式是天生线程安全的
1 饿汉式: 第一次引用就会创建一个实例, 也只会有这一个实例 所以线程安全; 但是缺点是没办法实现懒加载
饿汉式 (线程安全)
2 懒汉式: 在单线程中 Singleton 的静态属性 instance 中, 只有 instance 为 null 的时候才创建一个实例, 构造函数私有, 确保每次都只创建一个, 避免重复创建; 缺点不能再多线程中使用, 因为: 当两个线程同时运行到判断 instance 是否为空的 if 语句, 并且 instance 确实没有创建好时, 那么两个线程都会创建一个实例
懒汉式 (线程不安全)
3 同步锁模式: 在懒汉模式上加上了方法同步锁, 在同一时刻只能有一个线程得到锁, 所以在多线程下也能保证只有一个实例; 缺点: 每次通过 getInstance 方法得到 singleton 实例的时候都有一个试图去获取同步锁的过程. 加锁很耗时.
(懒汉式) 同步锁单例
4 双重加锁 DCL: 只有当 instance 为 null 时, 需要获取同步锁, 创建一次实例. 当实例被创建, 则无需试图加锁; 缺点: 用双重 if 判断, 复杂, 容易出错.
DCL
5
来源: http://www.jianshu.com/p/0a81c4e5b1af