本文共 1484 字,大约阅读时间需要 4 分钟。
单例模式是为了保证一个应用中只有一个实例对象,在单线程的情况下,只需对构造方法私有化,加上对象唯一指定就能实现,但是在多线程的情况下,就会出现问题
单例模式的分类:
* 饿汉式 * 由于饿汉式是在初始化时就生成了对象,所以不存在安全问题``` stylus/** * @author: ZouTai * @date: 2018/4/8 * @description: 饿汉式:初始化实例(线程一定安全) */public class Singleton { /** * 1、构造方法私有 */ private Singleton(){} /** * 2、建立静态对象,单个 */ public static Singleton singleton = new Singleton(); public Singleton getInstance() { return singleton; }}```
懒汉式
/** * @author: ZouTai * @date: 2018/4/8 * @description: 懒汉式:不初始化实例,在用的时候才初始化(线程不安全) */public class Singleton2 { private Singleton2() { } private static Singleton2 singleton = null; /** * 双重检查加锁-或者叫做细粒度锁 * 偏向锁-》轻量级锁-》重量级锁 * * @return */ public static Singleton2 getInstance() { //自旋=while(true)占用cpu if (singleton == null) { // 读取时不会冲突 synchronized (Singleton2.class) { // 之所以再次判断,是为了防止其他线程已经更改了 if (singleton == null) { singleton = new Singleton2();// 指令重排序 // 申请一块内存空间 // 1 // 在这块空间里实例化对象 // 2 // instance的引用指向这块空间地址 // 3 } } } return singleton; }}
转载地址:http://gqepi.baihongyu.com/