文档章节

单例模式的多实现--安全实现

wangshuaixin
 wangshuaixin
发布于 2017/03/27 21:47
字数 313
阅读 24
收藏 2

单例的实现主要有两个方面:懒汉模式和饿汉模式,相同的特点都是私有的构造函数

懒汉模式很简单,初始化内部变量的时候就直接初始化单例的实例,保证存在。

public class Single {

	private Single() {
	}
	private static Single instance = new Single();
	
	public static Single getInstance() {
		return instance;
	}
}

饿汉模式相对就复杂一点,主要体现在保证实例的唯一,确保是单例,出现在多线程的并发访问中

饿汉模式的一种实现,双重判断:多线程访问前判断一次,如果已经生成,则不比进入锁,如果没有生成则进入锁代码,进入锁代码的第一件事就是再次判断,放置出现已经初始化,锁的时候保证安全的,确保唯一

public class SingleInstance {

	private SingleInstance() {
	}
	
	private static SingleInstance instance = null;
	
	public static SingleInstance getInstance() {
		if (null == instance) {
			synchronized (SingleInstance.class) {
				if (null == instance) {
					instance = new SingleInstance();
				}
			}
		}
		return instance;
	}
}

饿汉模式的另一种实现,内部类的方式,内部类是在第一次访问时进行初始化,保证实例的唯一。

public class SignleTes {
	
	private SignleTes() {
	}
	
	private static class SingleClass {
		private static final SignleTes te = new SignleTes();
	}
	
	public static SignleTes getInstance() {
		return SingleClass.te;
	}
}

 

© 著作权归作者所有

wangshuaixin

wangshuaixin

粉丝 20
博文 52
码字总数 61196
作品 1
海淀
架构师
私信 提问
加载中

评论(1)

陆条眉毛
陆条眉毛
帅哥,双重检测要加上volatile才能保证线程安全✨
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
【23种设计模式之一】单例设计模式(翻译)

引言: 这一系列文章,翻译自网络上的文章,不过中间会夹杂着个人的理解,非原创,不过中文应该算是原创。 下面介绍,使用设计模式的一些好处: 1、设计模式是已经在工业生产中使用的,用于解...

敲代码猥琐男
2015/01/13
639
2
Java单例设计模式的理解与常规实现方式

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

动力节点
01/02
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
285
2
设计模式1——Singleton设计模式

Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序运行生命周期中,使用了单例模式的类只能有一个实例对象存在。单例模式实现了类似C语言中全局变量的功能,单例模式常用于注册...

小米米儿小
2013/12/05
168
1

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
5
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部