文档章节

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

蔡蔡先生
 蔡蔡先生
发布于 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、单例类只...

晚天吹凉风
2018/02/22
0
0
Java单例设计模式的理解与常规实现方式

1:Java中单例模式是一种常见的设计模式,单例模式有以下特点:   单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2:java中单例模式的写法也有很多种,我在这...

动力节点
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

跨域的理解,以及解决方案!

/*什么是跨域? * 跨域的主要原因是浏览器的同源策略。 * =>>所谓的同源策略就是A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。 * 什么是同源? * =>>同源就是协议相同、域名相同...

流年那么伤
6分钟前
1
0
Nginx配置try_fiels,php无法获取$_GET参数

平时开发都是用LNMP,新安装的虚拟机在配置nginx的rewrite的时候使用try_files命令。但是在写的时候配置成“try_files $uri $uri/ /index.php?q=args;”, 在PHP的web程序中,打印$_GET为空。...

叫我哀木涕
7分钟前
0
0
【原创】Microsoft Edge可以用localhost访问但无法用IP访问

Microsoft Edge可以用localhost和127.0.0.1访问但无法用本机IP访问, chrome ie都可以推测是edge的问题,网络是专用网络,防火墙也关了: 在edge里 按F12 以在控制台里看到这句 CONSOLE21301...

shzwork
7分钟前
0
0
Python利用数学方程式画4种不一样的心型图案

前言 下面这四个心型图案,是通过科学地计算,根据数学方程式生成的,虽然做的不是特别完美,但是基本的还是能实现的 第一个心型 结果图 第二心型 结果图 学习从来不是一个人的事情,要有个相互监...

A_裙232550246
7分钟前
0
0
微信带场景参数的二维码生成与使用?

微信公众号推广时,用户通过扫二维码关注公众号,需要统计用户是通过谁的二维码进行关注。 在用户扫码关注公众号时,二维码带上推广者的参数,在关注公众号后,获取到该推广者的参数。 目前有...

wxgzhgncj
8分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部