zoukankan      html  css  js  c++  java
  • Java 双判空的单例模式

    实习面试好几次都被问到单例模式,每次都差点事儿,决定自己再手写一遍,不能再出错了!!!!

    1   public class Single{
    2       private static volatile Single instance;
            // private : 不能直接从外部拿到
            // volatile : 由于存在指令重排,原先创建新对象instance的过程(分配空间->指向地址)可能会被打乱,
            //            导致A线程在进入第8行创建新实例时,先有了instance!=null,但实际还未分配空间赋初值,
            //            B来了,在第5行判不为空后直接拿走了一个还未赋初值的instance。使用volatile禁止指令重排。
    3       private Single(){}
            // 私有构造器
    4       public static Single getInstance(){
            // 获取单例的静态方法
    5           if(instance == null){
                // 第一个判空,如果不为空,就不用再创建一个对象了,直接拿走
    6               synchronized(Single.class){
                    // 如果为空,则需要独占这个类来创建一个新对象,防止创建多个
    7                   if(instance == null){
                        // 再次判空。A先来,发现null,创建去了,此时B来了,在锁处等待,等待结束后先看看创建没有,如果A创好了那就不能再创建。
    8                       instance = new Single();
    9                   }
    10              }
    11          }
    12          return instance;
    13      }
    14  }
    
  • 相关阅读:
    Postman测试写法的问题
    Spring Cloud
    Swagger2构造RESTful API开发Java Web
    web前端三大框架(主流Vue.js)
    zookeeper
    分布式服务介绍
    2019年java技术大盘点
    refusing to merge unrelated histories
    PPT制作不加班的十个小窍门
    如何快速完成一份学术型PPT
  • 原文地址:https://www.cnblogs.com/pravez/p/12539875.html
Copyright © 2011-2022 走看看