23种设计模式之一(单例模式)

单例模式:(确保一个类最多只有一个实例,并提供一个全局访问点)

    

 

存在的意义:

  有些对象我们只需要一个,如:线程池、缓存、硬件设备等;如果使用多个实例就会造成冲突、不一致等;

  比如打印机这个类,如果多个对象同时使用它的输出,打印机类就产生了多个实例,就可能造成打印顺序和内容的混乱;

线程最安全,效率最高的一种写法:

 1 public class Singleton {
 2     private Singleton(){}
 3     private static volatile Singleton instance;
 4     //volatile是给编译器用的
 5     //定义静态私有变量,不初始化,不使用fina;
 6     //使用volatile保证了多线程访问instance变量的可见性,
 7     //避免了instance初始化时其它变量属性还没完成赋值是被另外的线程调用
 8     public static Singleton getInstance(){
 9         if (instance == null) {
10             synchronized(Singleton.class){
11                 //双重锁保证了创建对象不会被重复执行,
12                 //synchronized代码块也很少重复执行,
13                 //相比在getInstance方法前添加synchronized更加节约资源
14                 if (instance == null) {
15                     instance = new Singleton();
16                 }
17             }
18         }
19         return instance;
20         
21     }
22 }
View Code

事实上,java通过反射机制实例化private类型的构造方法时,此时会使基本上所有的java单例实现失效;

 

获取单例对象需要保证线程安全,其中方法也要保证线程安全:

  说明:资源驱动类,工具类,单例工厂类都需要注意。

 

应用场景:

  1、资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置等。

  2、控制资源的情况下,方便资源之间的互相通信。如线程池等。

转载于:https://www.cnblogs.com/mmzs/p/7663239.html

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

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

相关文章

mysql监控

1、查看mysql所有线程:show full processlist;SHOW PROCESSLIST显示哪些线程正在运行。如果您有SUPER权限,即root权限之类,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账…

vSphere ESXi主机配置iSCSI存储

vSphere ESXi主机配置iSCSI存储 vSphere ESXi主机一般连接的存储类型有光纤存储、iSCSI存储两类。本次案例为iSCSI存储连接ESXi主机的配置。 案例环境:ESXi主机通过以太网络来连接iSCSID存储,并获取到存储空间,拓扑如下: 首先完成…

linux上验证cudnn是否安装成功_deepin15.7中安装tensorflow+cuda9.0+cudnn7的步骤

这次deepin15.7大更新,特别是深度学习环境搭建屡屡失败,很是恼火。本次按照下面的步骤做成功了,以下是deepin15.7下安装tensorflowcuda9.0cudnn7的全部流程。硬件1.神舟战神z7-kp7s1,双显卡双硬盘2.独显是gtx1060 6G系统安装1.下载…

【ichart】简单的统计图表ichart.js的使用

1、首先下载&#xff0c;点击下载 2、只需要这一个js&#xff0c;粘贴赋值到自己项目中即可。 3、引入js <script type"text/javascript" src"../js/ichart.1.2.min.js"></script> <script type"text/javascript" src"..…

ActiveMQ——activemq的使用java代码实例(精选)

ActiveMQ 在java中的使用&#xff0c;通过单例模式、工厂实现 Jms规范里的两种message传输方式Topic和Queue&#xff0c;两者的对比如下表()&#xff1a; TopicQueue概要Publish Subscribe messaging 发布订阅消息Point-to-Point 点对点有无状态topic数据默认不落地&#xff…

Eclipse+GitHub 提交代码错误 -“rejected - non-fast-forward”

Eclipse Push出现rejected - non-fast-forward错误 在 Push到服务器时有时会出现 rejected - non-fast-forward 错误&#xff0c;这是由于远端发生改变&#xff0c;此时再提交之前你需要将远端的改变合并到本地上错误原因&#xff1a;文件冲突&#xff0c;本地的代码和远程Repo…

两天学会css基础(一)

什么是css&#xff1f;css的作用是什么&#xff1f; CSS 指层叠样式表 (Cascading Style Sheets)主要作用就是给HTML结构添加样式&#xff0c;搭建页面结构&#xff0c;比如设置元素的宽高大小&#xff0c;颜色&#xff0c;位置等等。 学习css之前先了解一下css代码在HTML中的…

LVM 逻辑卷 (logica volume manager)

逻辑卷轴管理员 (Logical Volume Manager) 想像一个情况&#xff0c;你在当初规划主机的时候将 /home 只给他 50G &#xff0c;等到使用者众多之后导致这个 filesystem 不够大&#xff0c; 此时你能怎么作&#xff1f; 多数的朋友都是这样&#xff1a;再加一颗新硬盘&#xff0…

sql查询语句for xml path语法

【原地址】 for xml path作用&#xff1a;将多行的查询结果&#xff0c;根据某一些条件合并到一行。 例&#xff1a;现有一张表 执行下面语句 select Department,(SELECT Employee, FROM People b WHERE b.Departmenta.Department For XML Path()) Student from People as a g…

Android Studio打包以及Gradle配置构建

本文转载 郭霖公众号 https://mp.weixin.qq.com/s?__bizMzA5MzI3NjE2MA&mid2650241610&idx1&snb8af73f6c288b6617d9fe0ab3618118d&pass_ticketQK4j37kpmGNlsYcECWMb64HxKHEVJG5mSJubQEQguKI%3D 生成签名文件手动打包 首先生成签名文件&#xff0c;点击 Build…

java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...

1.重载方法上一篇文章用到的max方法只能用于int型数据类型&#xff0c;但是如果需要决定两个浮点数中哪个较大&#xff0c;解决方法是创建另一个方法名相同但参数不同的方法&#xff0c;代码如下&#xff1a;public static double max(double num1, double num2){if(num1>nu…

编码(转)

https://www.zhihu.com/question/28164512 关于编码和乱码的问题&#xff0c;我简单讲一下。 通常问这类问题的人是混淆了若干个不同的概念&#xff0c;并且他们自己也没有意识到自己混淆了这些概念的。 终端显示字符的编码&#xff08;windows下终端是cmd&#xff0c;linux下是…

Spring MVC:测试简介

测试是软件开发中最重要的部分之一。 井井有条的测试有助于使应用程序代码保持良好状态&#xff0c;并且处于工作状态。 有很多不同类型的测试和方法。 在本文中&#xff0c;我想对基于Spring MVC的应用程序进行单元测试进行介绍。 不要希望在这里阅读有关Spring MVC测试的全部…

试验ConcurrentHashmap

我正在研究我最近的一个项目中的内存问题&#xff0c;该项目将数据保留在内存中以进行快速访问&#xff0c;但是应用程序的内存占用量非常大。 该应用程序大量使用CHM&#xff08;即Concurrenthashmap&#xff09; &#xff0c;因此&#xff0c;无需再费脑筋地猜测CHM是问题所…

java线程池任务失败_ThreadPoolExecutor线程池任务执行失败的时候会怎样

1. 任务执行失败时的处理逻辑1.1. WorkerWorker相当于线程池中的线程可以看到&#xff0c;Worker有几个重要的属性&#xff1a;thread &#xff1a; 这是Worker运行的线程&#xff0c;可以理解为一个Worker就是一个线程firstTask &#xff1a; 初始任务&#xff0c;可能为为n…

转:HttpModule与HttpHandler详解

ASP.NET对请求处理的过程&#xff1a;当请求一个*.aspx文件的时候&#xff0c;这个请求会被inetinfo.exe进程截获&#xff0c;它判断文件的后缀&#xff08;aspx&#xff09;之后&#xff0c;将这个请求转交给 ASPNET_ISAPI.dll&#xff0c;ASPNET_ISAPI.dll会通过http管道&…

mysql时间函数总结_MySQL 日期时间函数常用总结

获得当前日期时间(date time)1.1 函数&#xff1a;now()相关函数&#xff1a;current_timestamp()&#xff0c;localtime()&#xff0c;localtimestamp()举例说明&#xff1a;2. 获得当前日期(date)函数&#xff1a;curdate()相关函数&#xff1a;current_date()&#xff0…

Apache CXF – JAX-WS –简单教程

许多Java开发人员认为Web Service实现的任务艰巨-没人能真正责怪他们&#xff0c;尤其是在企业应用程序开发的多年中&#xff0c;这给开发和设计带来了很多复杂性。 对于某些人来说&#xff0c;了解它是构建完整的企业应用程序的下一步-Web服务-是实现面向服务设计的关键方案之…

Java StringBuilder神话被揭穿

神话 用加号运算符连接两个字符串是万恶之源 -匿名Java开发人员 注意 &#xff1a;此处讨论的测试的源代码可以在Github上找到 从大学时代起&#xff0c;我就学会了使用运算符将Java中的String连接视为致命的性能缺陷。 最近&#xff0c;在Backbase R&#xff06;D上进行了一…

java3d创建立方体_Opengl创建几何实体——四棱锥和立方体

//#include #include #include using namespace std;float rtri;float rquad;GLfloat points0[5][3] { {0,1,0},{-1,-1,1},{1,-1,1},{1,-1,-1},{-1,-1,-1} };GLfloat points1[8][3] { {1,1,-1},{-1,1,-1},{-1,1,1},{1,1,1},{1,-1,1},{-1,-1,1},{-1,-1,-1},{1,-1,-1} };//四棱…