文档章节

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

蔡蔡先生
 蔡蔡先生
发布于 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设计模式-单例模式

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

Jet啟思
2017/10/26
0
0
设计模式(创建型)之单例模式(Singleton Pattern)

转载来自:http://blog.csdn.net/yanbober/article/details/45312675 PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊! 【...

xiaopangzi520
06/26
0
0
1、单例模式

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

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

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

职业搬砖20年
08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
1
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
1
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
3
0
【Centos】在nginx服务器中配置php和mysql

接上一章《【Centos】利用Vultr服务器和namesilo布网》(https://my.oschina.net/u/3776619/blog/2051986),在Centos中配置好nginx,并在iptables中开启了80端口,和为了远程mysql操作方便开...

yongh701
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部