• Java单例模式详解



    package
    com.cd.demo; /** * 单例模式 * 使用单例模式之后就只能保证只有一个实例 * @author iathanasy * */ public class Singleton { //必须有一个私有的静态变量,来引用自己即将被创建出来的单例 private static Singleton instance = null; /** * 必须对自己的构造方法使用private 进行私有化 * 这样才能保证,外界的代码不能随意的创建类的实例 */ private Singleton(){ } /** * 这个方法,负责创建唯一的实例,并且返回这个唯一的实例 * 必须考虑到可能出现的多线程并发访问安全的问题 * * 就是说可能会有多个线程同时过来获取单例,那么可能导致创建多个单例 * 所以这个方法,通常需要进行多线程并发访问安全的控制 * * 这里说下在当前实例中,在方法上加synchronized关键词的问题/弊端 * public static synchronized Singleton getInstance()方法 * 弊端:在第一次调用的时候,的确可以做到避免多个线程并发访问创建多个实例的问题 * 但是在第一次创建完实例以后,就会出现以后的多个线程并发访问这个方法的时候,就会在方法级别进行同步 * 导致并发性能大幅度降低 * @return */ public static Singleton getInstance(){ /** * 两步检查机制 * 第一步:多个线程过来的时候,判断instance是否为null */ if(instance == null){ /** * 在这里进行多个线程的同步 * 同一时间,只能有一个线程获取到Singleton.class对象的锁 * 其他的线程只能够在原地等待,获取锁 */ synchronized(Singleton.class){ /** * 只有第一个获取到锁的线程,进入到这里,会发现instance 是null * 然后才会去创建这个单例 * (如果这里不进行if(instance == null) ,其它的等待线程就会进入直接创建,从而导致创建多个实例) * 此后,线程,哪怕是走到了这一步,也会发现instance 已经不是null了 * 就不会反复创建了 */ if(instance == null){ instance = new Singleton(); } } } return instance; } }

  • 相关阅读:
    14071702(SkeletalControl_Limb)
    14072202(带IK的Recoil)
    UE3植被工具-支持刷Actor)
    UDK:AdventureKit 攀爬系统
    16082402(SkeletalMesh的绘制流程)
    windows下安装nodejs
    laravel迁移文件
    laravel的资源路由resource
    sleep参数是整型还是小数
    node.js和npm的关系
  • 原文地址:https://www.cnblogs.com/iathanasy/p/9851134.html
Copyright © 2020-2023  润新知