文档章节

单例模式

随风1993
 随风1993
发布于 2017/05/25 16:53
字数 338
阅读 1
收藏 0

代码:

/**
 * @author tj
 * 单例模式--懒汉模式
 */
public class SingleMode {
    
    private static SingleMode s;//不初始化
    
    public SingleMode(){
        
    }
    
    public static SingleMode getIntance(){
        if(s == null){//jvm加载该类class到内从时,会执行static代码块,s未初始化时,才新建一个对象出来
            s = new SingleMode();
        }
        
        return s;
    }
    
    /**
     * 多线程下的懒汉模式,多线程下存在同步问题,比如多个线程操作同一共享数据,为保持同步需要加锁
     * @return
     */
    public static SingleMode getIntance1(){
        if(s == null){
            //为什么是在SingleMode.class加锁,有必要解释一下
            //jvm的加载机制下 SingleMode的class文件加载到内存后,该类的字节码文件已经被封装成一个字节码对象了,也就是说
            //一般情况下,一个class文件被加载以后就会创建一个class对象,当然也会加载该类中的static代码块
            //static代码属于该class对象。所以这里static代码块加锁 用的就是SingleMode.class对象锁
            synchronized (SingleMode.class) {
                s = new SingleMode();
            }
        }
        
        return s;
    }
    
    /**
     * 双重检查模式
     * 上述方法还有一个小缺陷 当两个线程同时执行到 synchronized (SingleMode.class) { 时
     * 线程一先执行,线程2执行后会创建出两个SingleMode的实例,故需要二重判断
     * @return
     */
    public static SingleMode getIntance2(){
        if(s == null){
            synchronized (SingleMode.class) {
                if(s == null){
                    s = new SingleMode();
                }
            }
        }
        
        return s;
    }

}

© 著作权归作者所有

随风1993
粉丝 0
博文 9
码字总数 2110
作品 0
普陀
后端工程师
私信 提问

暂无文章

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
3
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
7
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部