文档章节

单例模式学习笔记

相见却不识
 相见却不识
发布于 2018/09/19 15:47
字数 401
阅读 1
收藏 0

1.饥汉模式 

public class Singleton{ 

    //饥汉模式: 创建私有静态化实例,在类初次加载时即初始化
    private static final Singleton instance = new Singleton();

    //将Singleton()构造方法级别置为private 
    private Singleton(){};

    //公有静态方法,获取单例实例
    public static Singleton getInstance(){
        return instance;
    }

}

2.饱汉模式(双重检查)

public class Singleton{
    
    //饱汉模式:在类初次加载时不进行实例初始化,当需要使用实例时初始化(volatile为必须)
    private static volatile Singleton instance = null;

    //将Singleton()构造方法级别置为private
    private Singleton(){};

    //双重检查,当实例instance为null时,初始化该实例
    public static Singleton getInstance(){
        if( instance == null ){
            //加锁
            synchronized(Singleton.class){
                if( instance == null ){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

3.静态嵌套类(推荐)

public class Singleton{

    //将Singleton()构造方法级别置为private
    private Singleton(){};

    //静态嵌套类内部初始化实例
    private static class SingletonInstance{
        private static final Singleton instance = new Singleton();
    }

    //获取实例方法
    public static Singleton getInstance(){
        return SingletonInstance.instance;
    }

}

注:

        在上2例,如果不使用volatile关键字,则在多线程情况下,由于JMM(Java内存模型)的原因,可能导致非单例情况,利用volatile的可见性可解决该问题(JDK1.5及之后).

        枚举类很特殊,在类加载的时候会初始化所有实例,且不会再次被实例化(由JVM保证),也可以实现单例(不推荐使用).

        静态嵌套类与内部类不同.

© 著作权归作者所有

相见却不识
粉丝 4
博文 24
码字总数 11747
作品 0
海淀
程序员
私信 提问
Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式 这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 《Head First Desgin Pattern》的原版书,顺便做下笔记,把里面提...

Tek_Eternal
2015/01/02
71
0
Java设计模式系列一(前言)

说起设计模式,很多人都会觉得这个概念很熟悉,会想到单例模式、工厂模式等等,但是似乎又说不出来什么,说不上它的核心思想和设计原则。其实我们的项目中,为了代码复用,增加可维护性,很多...

Mooree
04/07
27
0
让设计模式飞一会儿|①开篇获奖感言

     哈喽,大家好,从今天开始我将正式开启有关设计模式的系列文章的写作,和大家一同来聊聊设计模式这个老生常谈的玩意。关于设计模式的文章,书籍,多如牛毛,随便百度、Google一下都...

java进阶架构师
09/18
0
0
设计模式学习笔记之-代理模式

代理模式中,客户不会直接调用目标对象而是通过一个代码对象,客户调用代理对象代理对象去调用目标对象,起到对象与对象间的隔离作用。有时候我么不想直接访问目标对象,有时候我们不能直接访...

申文波
2018/03/05
170
0
深入理解javascript系列(九):应用闭包

理论是自信的基础,结合理论的实践才能让我们走的更远。 前两个系列,我记录了闭包的学习,如何利用闭包解决实际问题了?其实,很多东西你我都知道,不是一蹴而就的,不是你今天学了就会了,...

Panthon
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSM初识(三)OSM Data

一 导出数据 将XML格式的OSM数据转换成另一种格式。 二 提取数据 剪切你选择区域内的数据,或者提取出特定区域特定的特征 三 数据格式 OSM文件仅属于OSM,不能用别的软件打开。其中后缀为bz2...

yuankaichao
33分钟前
7
0
Queue

class Queue { constructor() { this._items = []; } enqueue(item) { this._items.push(item); } dequeue() { this._items.shift();......

gtandsn
34分钟前
5
0
数据防泄漏系统有何实用价值?企业文件加密软件哪个好?江苏风奥科技

数据防泄漏系统的发展,减少了国内数据泄露事件的发生,保护了个人信息安全,企业信息安全,保密级数据安全等互联网时代发展的重点关注话题,国内信息化步伐的加快,改变了传统的办公以及发展...

fasoft
35分钟前
7
0
Helm 3 发布 | 云原生生态周报 Vol. 27

作者 | 墨封、元毅、冬岛、敖小剑、衷源 业界要闻 1.Helm 3 发布 美国时间 11 月 13 日,Helm 团队发布 Helm 3 第一个稳定版本。Helm 3 以 Helm 2 的核心特性为基础,改进了 chart 存储库、版...

一肥仔
42分钟前
3
0
Spring Boot2.x 内置Tomcat调优,使用Apr模式

启用Apr模式,需要调用方法 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory#setProtocol windows下安装配置native和apr只需要在环境变量path里能够找到 tcna...

xiaomin0322
48分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部