zoukankan      html  css  js  c++  java
  • 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; } }

  • 相关阅读:
    JS实现动态生成表格并提交表格数据向后端 表格中数据转为json
    JS 添加和删除HTML 标签
    操作系统杂碎
    bootstrap3级下拉菜单 及 CSS实现三级下拉菜单分析
    jquery获取复选框被选中的值
    Mac 命令行启动并连接Redis
    抓包工具不抓包的话记得看看还有没有没关的代理
    Mac OS Sierra 安装PHP扩展 Operation not permitted
    导航栏对于UIScrollview以及子类所做的一些事
    探索static的用处
  • 原文地址:https://www.cnblogs.com/iathanasy/p/9851134.html
Copyright © 2011-2022 走看看