单例模式小记【原创】

      中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,先看类图:

     

     单例模式最大的特点就是在类里有一个private构造函数,保证这个类不被其他类new出来。而getInstence是用来获得此类唯一的有一个实例化对象的方法

 

经典的单例模式代码:

@SuppressWarnings("all")
public class SingletonPattern {
private static SingletonPattern singletonPattern= null;
//限制住不能直接产生一个实例
private SingletonPattern(){
}
public SingletonPattern getInstance(){
if(this.singletonPattern == null){ //如果还没有实例,则创建一个
this.singletonPattern = new SingletonPattern();
}
return this.singletonPattern;
}
}

 

     客户端调用时,不能new出这个类的对象,只能通过getInstence是用来获得此类唯一的有一个实例化对象的方法,而getInstence里有句关于类中静态成员变量singletonPattern的存在判断,保证其唯一性。

 

      当然这个例子有个很不完善的地方,就是遇到多线程问题时,假如现在有两个线程A和线程B,线程A执行到 this.singletonPattern = new SingletonPattern(),正在申请内存分配,可能需要0.001微秒,就在这0.001微秒之内,线程B执行到if(this.singletonPattern == null),你说这个时候这个判断条件是true还是false?是true,那然后呢?线程B也往下走,于是乎就在内存中就有两个SingletonPattern的实例了,看看是不是出问题了?

      如果你这个单例是去拿一个序列号或者创建一个信号资源的时候,会怎么样?业务逻辑混乱!数据一致性校验失败!最重要的是你从代码上还看不出什么问题,这才是最要命的!因为这种情况基本上你是重现不了的,不寒而栗吧,那怎么修改?有很多种方案,我就说一种,能简单的、彻底解决问题的方案:

@SuppressWarnings("all")
public class SingletonPattern {
private static final SingletonPattern singletonPattern= new SingletonPattern();
//限制住不能直接产生一个实例
private SingletonPattern(){
}
public synchronized static SingletonPattern getInstance(){
return singletonPattern;
}
}

直接new一个对象传递给类的成员变量singletonpattern,你要的时候getInstance()直接返回给你,解决问题!

另外,如果你不想singletonPattern 一个初始值,也可以通过synchronized关键字声明getInstence方法,保证只有一个线程访问此方法来解决。

 


 

转载于:https://www.cnblogs.com/winkey4986/archive/2012/03/26/2417369.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试 ( 3 ) --- Metasploit Framework ( MSF )

白嫖 :https://zhuanlan.zhihu.com/p/449836479:http://t.zoukankan.com/hxlinux-p-15787814.html:https://www.52pojie.cn/thread-1586222-1-1.html Metasploit Pro 英文文档:https://docs.rapid7.com/metasploit/ Metasploit P…

工业4.0进行时:工业机器人为何能够快速爆发?

来源:资本实验室摘要:聚焦前沿科技创新与传统产业升级自George Devol于1961发明第一台可编程工业机器人“Unimate”以来,工业机器人产业已经走过了几十年的历史。到了2000年,全球约有74.25万台工业机器人。其中,超过一…

CRITICAL_SECTION 学习

// Critsetion.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <Windows.h> #include <iostream> #include <process.h> using namespace std;CRITICAL_SECTION g_cs; char name[]"zhangdongsheng";unsigned __std…

渗透测试 ( 4 ) --- Meterpreter 命令详解

From&#xff1a;https://blog.csdn.net/weixin_45605352/article/details/115824811 <<Web 安全攻防(渗透测试实战指南)>> 1、初识 Meterpreter 1.1.什么是 Meterpreter Meterpreter 是 Metasploit 框架中的一个扩展模块&#xff0c;作为溢出成功以后的攻击载荷使…

深度:中国车企遭遇最大危机!末尾淘汰赛开始【附下载】| 智东西内参

来源&#xff1a;智东西摘要&#xff1a;靠“合资”起步的中国自主品牌汽车走到了成熟期的转折点&#xff0c;面临的形势极为严峻。中国汽车自主品牌30多年的发展过程&#xff0c;从闭门造车到合资建厂&#xff0c;再到民营崛起&#xff0c;正在逐渐走向开放。经国务院批准&…

渗透测试 ( 5 ) --- 扫描之王 nmap、渗透测试工具实战技巧合集

Nmap 官方文档 ( 中文文档是 Nmap 版本4.50&#xff0c;英文文档是最新的 )&#xff1a; 英文文档&#xff1a;https://nmap.org/book/man.html中文文档&#xff1a;https://nmap.org/man/zh/index.html#man-description官方 Nmap 项目指南 &#xff1a;https://nmap.org/book…

OSI、TCP/IP or Five-layer(Protocols Use) Model

转载于:https://www.cnblogs.com/michael-shan/archive/2012/03/31/6649681.html

央视深入报道,国内主流芯片真实水平如何?

来源&#xff1a;芯师爷摘要&#xff1a; 站在风口上&#xff0c;猪都会飞&#xff01;——用这来概括当下国内芯片领域再恰当不过了。自中兴事件之后&#xff0c;很多创业者纷纷将商业计划的关键字调整为“芯片”。与此同时&#xff0c;投资者也将目光转移至AI芯片、自动驾驶芯…

渗透测试 ( 6 ) --- SQL 注入神器 sqlmap

sqlmap 官网&#xff1a;http://sqlmap.org/ sqlmap文档地址&#xff1a;https://github.com/sqlmapproject/sqlmap/wiki/Usage sqlmap 使用 思维导图&#xff1a;http://download.csdn.net/detail/freeking101/9887831 黑帽与白帽都喜爱的十大SQL注入工具&#xff1a;http://…

美国研发出百万兆级计算机 Summit,“最强超算”竞争加剧

来源&#xff1a;36Kr摘要&#xff1a;史上最强计算机出现&#xff0c;美国开发出了世界上第一台百万兆级的计算机&#xff0c;超强的计算能力有望能解决更复杂的问题。上个月&#xff0c;美国能源部公布了世界上最快的超级计算机——Summit&#xff0c;整个美国为之庆祝。现在…

渗透测试 ( 7 ) --- 漏洞扫描工具 Nessus

Nessus 官网&#xff1a;https://www.tenable.com/products/nessus/nessus-professional 1、Nessus 简介、下载、安装 1.1 简 介 Nessus 是世界上很流行的漏洞扫描程序&#xff0c;全世界很多组织都有在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞…

报告|中国智能音箱已入局全球市场,双重商业模式迅速扩张

来源&#xff1a;网易智能摘要&#xff1a;最近&#xff0c;全球知名创投研究机构CBInsights发布了有关中国智能音箱市场及业务模式的研究报告&#xff0c;这是其“中国人工智能”系列报告的第三部分。这份报告将目光转向低成本、高容量的智能音箱市场&#xff0c;探讨新的商业…

渗透测试 ( 8 ) --- Burp Suite Pro 官方文档

Burp Suite 官网 &#xff1a;https://portswigger.net/burp 官方文档&#xff1a;https://portswigger.net/burp/documentation/desktop 完整文档&#xff1a;https://portswigger.net/burp/documentation/contents Burp Suite 实战指南 &#xff1a;https://t0data.gitbooks…

人工智能恶意使用报告:预测、预防和缓解

来源&#xff1a;199IT互联网数据中心摘要&#xff1a;一份研究报告指出&#xff0c;人工智能的高速发展伴随着风险。不肖人士可能会使用这个技术发动全自动攻击&#xff0c;让自驾车失控、或把商业用无人机变成能够锁定目标的武器。一份研究报告指出&#xff0c;人工智能的高速…

渗透测试 ( 9 ) --- 社会工程攻击工具 setoolkit

github 地址&#xff1a;https://github.com/trustedsec/social-engineer-toolkit kali工具 -- setoolkit(克隆网站及利用)&#xff1a;https://blog.csdn.net/weixin_41489908/article/details/103851057 1、社会工程学概念 社会工程学通常以交谈、欺骗、假冒或口语等方式&am…

渗透测试 ( 10 ) --- 扫描 web目录、文件 (dirb、wfuzz、wpscan、nikto)

当使用一个工具扫描完成后&#xff0c;如果没发现漏洞&#xff0c;可以再使用其他 web 扫描工具再扫描下&#xff0c;因为每个工具可能侧重点不一样&#xff0c;扫描出来的漏洞就不一样。 敏感文件目录探测方法大全 常用后台 工具扫描 wfuzz dirseach web 爬虫 搜索引擎 文件路…

AI当道,媒体会被机器牵着鼻子走?

来源&#xff1a;猎云网摘要&#xff1a; 现如今&#xff0c;社交媒体平台、搜索引擎和内容聚合商&#xff0c;在很大程度上控制了不同媒体内容的用户流向&#xff0c;从而直接影响了创作出来供大家消费的新闻内容。自此&#xff0c;有人认为&#xff0c;新闻媒体的未来再也无法…

MOON.ORM 3.5 MYSQL的配置及使用方法(最新版免费下载使用.欢迎加盟)

下载代码生成器 /Files/humble/Moon.ORM-3.6.zip配置大码生成器的配置文件.http://www.mysql.com/downloads/mirror.php?id406542 mysql 2.0下载地址通过代码生成器,生成你系统数据库中所有的实体.(编译Mode,然后在C盘找到 MoonDB.CS 或者 MoonDB.DLL,引入dll或者文件到你…

政府大数据应用的反思;大数据分析应用常见的困难

来源&#xff1a;网络大数据摘要&#xff1a;在智慧城市建设中&#xff0c;以支持政府决策为名的大数据中心建设如火如荼&#xff0c;但利用大数据改进决策的成功案例却鲜有&#xff0c;与大数据中心的投资不成比例&#xff0c;令人质疑大数据中心遍地开花模式的合理性。一、政…

thinkphp 官网教程

thinkphp 官网教程&#xff1a;https://sites.thinkphp.cn/1556331 thikphp5 框架详解 ​ThinkPHP5 - 从入门到实践&#xff08;完整版&#xff09;&#xff1a;https://www.bilibili.com/video/BV13a4y1E7dyThinkPHP5.0 框架全方位解读与实战&#xff1a;https://github.com/k…