标签:ola tin 原因 地址 饿汉式 == pack 使用 color
单例模式使用非常的广泛,那么你会使用哪几种方式去实现呢?
/** * 懒汉式-双重检查 */ public class SingleDcl { //一定要使用volatile关键字。 private volatile static SingleDcl singleDcl; private SingleDcl(){ } public static SingleDcl getInstance(){ if(singleDcl==null) { synchronized (SingleDcl.class) {//类锁 if(singleDcl==null) { /**如果不使用volatile关键字,这时候判断singleDcl不为null,但是new SingleDcl()不是原子的 *可能先将内存中的某块空间分给这个对象,并给与一个地址,但是此时对象并没有完全初始化好 *比如构造器中的初始化内容较多等等,当然还涉及到指令重排序等等原因。导致报空指针 */ singleDcl = new SingleDcl(); } } } return singleDcl; } }
package com.xiangxue.ch7.dcl; /** * @author Mark老师 享学课堂 https://enjoy.ke.qq.com * 饿汉式 */ public class SingleEHan { public static SingleEHan singleEHan = new SingleEHan(); private SingleEHan(){} }
package com.xiangxue.ch7.dcl; /** * 懒汉式-类初始化模式 */ public class SingleInit { private SingleInit(){} //定义一个私有类,来持有当前类的实例 private static class InstanceHolder{ public static SingleInit instance = new SingleInit(); } public static SingleInit getInstance(){ //当调用此方法时,InstanceHolder类才开始初始化,因为使用了其static变量,此时才会实例化SingleInit对象 return InstanceHolder.instance; } }
标签:ola tin 原因 地址 饿汉式 == pack 使用 color
原文地址:https://www.cnblogs.com/alimayun/p/12174092.html