Gof设计模式之单例模式(一)

今天开始更新设计模式系列,题目中Gof指的是《Design Patterns: Elements of Reusable Object-Oriented Software》一书的四名作者,俗称四人组,在此向经典致敬。该文讲结合我读这本书的心得外加这本书上的经典案例进行讲解,设计模式只是一种思想,并不是固定格式,所以如果以后看到的结构与本文中案例不同,并不能说人家就不是我们所说的设计模式,只要是思想是通的,那么就会相应的模式。大家千万不要死板死套。

今天我们所说的这个是单例模式,单例模式一听就知道是什么了,就是只有一个实例,那么如何保证只有一个实例,并且不被GC回收呢,我们前面的系列讲过堆中保存对象实例,今天我们用到一个很重要的关键字volatile,这个关键字可以保证线程对数据的可见性,其实理解他还需要理解内存的三大模型原子、可见、有序,未来我会写个专栏讲解。今天只是用一下,volatile其实就是不直接把变量保存到单线程的缓存中,而是直接保存到内存中,所有的线程读取时都会获得最新的数据,其实他跟synchronize用来保证有序性,java代码在运行时会乱序,而volatile保证了顺序。

一个是编译时期产生,一个是用时产生

这个双锁效率大大提高,理论上10个进程访问也只是消耗一个if的资源

其实单例模式很简单就是防止重复实例化浪费资源。

原文发布于微信公众号 - 精讲JAVA(toooooooozi)

原文发表时间:2017-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

两年Java程序员面试经

工作两年有余,本人第一份工作是在一家外包公司,第二份工作是在一家做SAAS平台的公司,第一家公司让我入门,进入了软件开发的行业,了解了一些基础的东西;第二家公司...

3492
来自专栏Java学习网

书写高质量代码之状态维护

状态之始 我们第一眼接触新事物所触发的思考方式,决定了以后我们看待这样事物的角度,进而影响更深层次的理解和行为。 编程相对于人类历史的进程而言,不过是个六七岁孩...

2894
来自专栏企鹅号快讯

Python循环控制之for

各位小伙伴们 大家周三愉快 今天我们要来共同探讨 另外一个在Python中 (严格的说实在所有语言中) 最重要的语句之一 For()循环控制语句 技术要点: f...

2086
来自专栏Java技术栈

架构师必须掌握的 10 条设计原则

函数是程序员的工具中最重要的抽象形式。它们能更多地被重复使用,你需要编写的代码就越少,代码也因此变得更可靠。较小的函数遵循单一职责原则更有可能被重复使用。

1121
来自专栏python3

python介绍

python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已...

2181
来自专栏take time, save time

python 爬虫 入门 commit by commit -- commit5

代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录。

610
来自专栏take time, save time

python 爬虫 入门 commit by commit -- commit3

代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录。

1402
来自专栏编程

如何提高Python运行效率 超实用的四种提速方法

Python增长势头一直非常迅猛,它虽然是脚本语言,但容易学,同时,还有非常多优秀的深度学习库可用,也有越来越多的人将Python学习列入计划。Python是一...

2667
来自专栏软件开发 -- 分享 互助 成长

虚拟存储管理

程序局部性原理:基于大量的程序运行特征的观察发现在一段时间内,一个程序的执行往往是呈现高度的局部性。 表现在以下两个方面: 时间局部性:若一条指令被执行,那么不...

2006
来自专栏Jed的技术阶梯

Java设计模式之命令模式

假设某个项目组分为需求组(Requirement Group,简称RG)、美工组(Page Group,简称PG)、代码组(Code Group,简称CG),还...

763

扫码关注云+社区

领取腾讯云代金券