- package com.zjh.designmodel.SingleModel;
- /*
- 单例模式
- */
- public class SingleModel {
- /*
- 因为要保证单例所以不允许被其他类构造,所以要先定一个静态变量去存储
- */
- private volatile static SingleModel singleModel;
-
- private SingleModel(){};/*设置私有构造不允许其他类直接创建*/
-
- /*创建自身创建静态方法*/
- public static SingleModel getSingleModelInstance(){
- //先判断是否被实例化过
- if (singleModel==null){
- // singleModel = new SingleModel(); 单线程单例已完成,多线程单例未完成若一起创建直接被改变
- synchronized(SingleModel.class) {//这里是给这个这个类中的这个代码块加锁同步一下排队创建
- // ,但是会因为已经进入null有多个线程所以得再判断是否为空
- if (singleModel==null) {//但是还是有问题因为在方法返回之前singleModel没有同步静态变量
- //private static SingleModel singleModel; 是不可见的所以要加volatile保证他的可见性
- singleModel = new SingleModel();
- }
- }
- }
- return singleModel;
- }
- }