文档章节

单例设计模式及懒汉式线程安全问题

蔡蔡先生
 蔡蔡先生
发布于 2017/05/15 15:05
字数 406
阅读 18
收藏 0

1.介绍

单例(singleton)设计模式:单态、原子设计模式。

单例设计模式作用:

    它主要用来保证一个类在程序从启动到最后结束,要保证这个类的对象只有一个。单例就是保证一个类的对象是唯一的。

生活中的场景:

    比如:A和B2个人去奶茶店买奶茶,老板在给A做奶茶时,B只能等待。只有给A做完奶茶后才能给B做奶茶。

结论:

    单例设计模式解决就对象在堆内中只能开辟一个空间。

//饿汉式
class Singleton (){
    //私有化构造
    private Singleton(){};
    //持有自身对象
    private static Singleton s = new Singleton();
    //对外提供方法
    public Singleton getInstance(){
        return s;
    }
}
//懒汉式
class Singleton2 (){
    //私有化构造
    private Singleton2(){};
    //持有自身对象
    private static Singleton2 s2 = null;
    //对外提供方法
    public Singleton2 getInstance(){
        if(s2 == null){
            s2 = new Singleton2();
        }
        return s2;
    }
}

懒汉式线程安全问题:

// 懒汉式:
class Singleton2 {
	// 私有化构造
	private Singleton2() {};
	// 持有自身对象
	private static Singleton2 s = null;
	// 对外提供方法,获取对象
	public static Singleton2 getInstance() {// t1 // t2
		// 我在外面再加一次判断,那么除了第一次创建对象时会进入并且判断同步。
		//接下来,再来更多线程,都不会进入if块。就不判断同步了,效率提高了。
		if (s == null) {
			// 加synchronized是为了第一次创建对象时线程安全。但是接下来,就不存在线程安全问题。还要判断同步效率低。
			synchronized (Singleton2.class) {
				if (s == null) {
					s = new Singleton2();
				}
			}
		}
		return s;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
蔡蔡先生
粉丝 1
博文 9
码字总数 8848
作品 0
宝山
程序员
私信 提问
23种设计模式(1):单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名、属性、方法 2.以<<开头和以>>结尾的为注释...

LCZ777
2014/07/05
0
0
Java程序员从笨鸟到菜鸟之(三十三)大话设计模式(三)单例模式

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说...

长平狐
2012/11/12
120
0
我的Java设计模式-单例模式

  就算不懂设计模式的兄弟姐妹们,想必也听说过单例模式,并且在项目中也会用上。但是,真正理解和熟悉单例模式的人有几个呢?接下来我们一起来学习设计模式中最简单的模式之一——单例模式...

Jet啟思
2017/10/26
0
0
1、单例模式

定义: 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。 特点: 1、单例类只...

晚天吹凉风
02/22
0
0
咕泡-单例 singleton设计模式笔记

##查看代码:https://gitee.com/jly521/singleton.git 单例模式(Singleton) 应用场景:保证一个类仅有一个实例,并提供一个访问它的全局访问点 Spring 中的单例模式完成了后半句话,即提供...

职业搬砖20年
08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker搞个wordpress

1.先把wordpress的镜像下载下来 docker pull wordpress 2.下载mysql docker pull mysql:lastest 3.启动mysql docker run --name blog -e root -d mysql:5.7 docker run --name some-mysql -e......

无极之岚
6分钟前
0
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

clone和new本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用clone也可以用new,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方...

宇润
6分钟前
0
1
点击按钮弹出类似IOS 底部 dialog

implementation 'com.baoyz.actionsheet:library:1.1.7' 然后设置按钮点击监听,,调用下列代码即可 ActionSheet.createBuilder(this, getSupportFragmentManager()) ......

lanyu96
10分钟前
1
0
专访阿里云专有云马劲,一个理性的理想主义者

“我的故事都是和团队技术相关的,自己还真没有什么引人入胜的故事。”当马劲被问到能不能多分享些个人经历故事时他笑着说,我们就干脆怀着好奇聊了聊他和阿里云专有云一路走来的故事。 马劲...

阿里云官方博客
42分钟前
1
0
java环形缓冲区

import java.util.ArrayList;import java.util.List;/** * * 环形缓冲区<br/> * 一. 写数据:<br/> * 1. push: 当数据已写满时返回false,否则可以正常写入返回true<br/>......

whoisliang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部