单例问题与线程安全

饿汉式

没有线程安全性问题


懒汉式

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

如果遇到多线程。上面的代码会返回不同的 SingletonDemo2 实例。违背了单例设计。

需要加上 synchronized 关键字。如下:

public synchronized static SingletonDemo2 getInstance() {if(instance==null) {instance=new SingletonDemo2();}return instance;}
虽然解决了 “ 返回不同的  SingletonDemo2 实例”问题,但是在线程很多得时候,性能不好,因为

synchronized 放在静态方法上,内置锁就是当前类的Class字节码对象,当一些偏向锁,轻量级锁过来的时候,都会失去它们性能优势,变成像 重量级锁一样。因而还不是最好的方法,需要改进。

最终版本:

public class Singleton2 {private Singleton2() {}//volatile 防止jvm 指令重排序private static volatile Singleton2 instance;public static Singleton2 getInstance(){if(instance==null) {synchronized (Singleton2.class) {if(instance==null) {instance=new Singleton2();}}}return instance;}
}

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

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

相关文章

python 音速_中国大学MOOC的APP(慕课)2021用Python玩转数据章节答案

在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当于人的神经网络,信息的处理相当于人的大脑,( )则将它们联系为一个整体,构成了作战的神经系统。车身可拆卸的连接有螺纹连接、卡口链接、铰链连接。在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当…

Mysql中的触发器

原文地址:https://www.cnblogs.com/zyshi/p/6618839.html ---------------------------------------------------------什么是触发器 简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好…

一张图理解JS的原型(prototype、_proto_、constructor的三角关系)

注意:前方高能预警,请认真仔细看完,阅读完后自己再次画下原型图,相信你一定会有更深刻的认识。(推荐炒鸡好用的画流程图的软件ProcessOn)构造函数:function Foo ( ) { };实例对象:let f1new Foo;let o1new …

Oracle触发器和MySQL触发器之间的区别

原文链接:http://blog.csdn.net/a19881029/article/details/37820363 -----------------------------------------------------------Oracle触发器格式:[plain] view plaincopyCREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDA…

下列选项中不符合python语言变量命名规则的是_学习Python第二日--基本概念和类型...

编程语言分类:解释型语言和编译型语言。解释型语言不会产生额外的文件,运行时一行一行的翻译。编译型语言需要产生一个额外的文件,是电脑能够识别的内容,运行后将产生额外的文件。 变量是可变的量,是它的值可以发生改变。变量的作用是保存值,保存的值可以是数据,而且保存…

HashMap死锁原因及替代方案

原文链接:http://blog.csdn.net/fhzaitian/article/details/51505516 ------------------------------------------------------------------------1、首先我们需要简单地了解一下HashMap数据结构 HashMap通常会用一个指针数组(假设为table[]&#xff09…

优化mysql数据库_MySQL数据库十大优化技巧

WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方…

跋山涉水——深入 Redis 字典遍历

Redis 字典的遍历过程逻辑比较复杂,互联网上对这一块的分析讲解非常少。我也花了不少时间对源码的细节进行了整理,将我个人对字典遍历逻辑的理解呈现给各位读者。也许读者们对字典的遍历过程有比我更好的理解,还请不吝指教。一边遍历一边修改…

linux下VI模式中上下左右键和回退键出现字母

原文地址:http://blog.csdn.net/u012860950/article/details/50127779 ---------------------------------------------------------------- 1.编辑/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修…

mysql数据库查询优化建议_mysql数据库查询优化的24条建议

MySQL是一个强大的开源数据库。随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈。这里提供一些关于Mysql 数据库查询优化的24条优化建议,仅供参考。Mysql 查询优化1、使用慢查询日志,找出执行慢的查询。2、使用 EXPLAIN 来决定查询功能是否合…

常规sql读取CLOB

plsql下,普通sqlsql-cmd下总结: 常规的sql,查询clob字段,只能显示部分内容。 查clob内容select dbms_lob.substr(c_content) from table_content t dbms_lob.substr将大文本转换字符类型读出来.dbms_lob.substr的转换对字段conten…

精解 ES6箭头函数

🐱 个人主页:SHOW科技,公众号:SHOW科技 🙋‍♂️ 作者简介:2020参加工作,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏&#x…

硬盘主引导记录详解

说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在; 什么操作系统中呢?;()。;; 如果您安装…

Oracle char varchar varchar2 nvarchar2 的区别

上面字符类型能保存多少个字符与oracle当前的字符集有关系。 select userenv(language) from dual; 假设长度2000字节, 如果字符集是16位编码的,ZHS16GBK,那么每个字符16位,2字节,所以可以容纳1000字符。 如果是32位编…

树莓派lnmp安装mysql_在树莓派上安装 LNMP

树莓派支持安装非常多的操作系统,如官方所展示:这里我选择了推荐的 Raspbian 系统,它基于 Debian,这就意味着我可以按照 Debian 的方式来安装软件。一、安装 Nginx0、先将系统更新到最新状态$ sudo apt-get update && sud…

openlayers5之热力图heatmap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/81745645 openlayers5之热力图 点击查看文章

maven项目在打war包时出现非法字符: '\ufeff' 解决方案

http://blog.csdn.net/qi_fei/article/details/61416319 --------------------------------------------问题描述: 开发工具MyEclipse 的总体开发环境,编码格式总体设置为UTF-8,在将web项目打包的时候出现:非法字符:\u…

0027-生成圆

题目 生成圆难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B 试题描述给你一些特殊的圆,每个这样的圆每秒可以产生一个普通的圆,如果给你…

mysql启多_MySQL启多个实例

很多朋友都想在一台服务器上运行多个MySQL Instance,究竟怎么做呢?首先要明晰几个原理, 简称为mysqld读取my.cnf的顺序:第一搜,首先读取/etc/my.cnf,多实例这个配置文件不会存在。:-(第二搜&…

数据连接池druid 和 大数据框架druid

叫druid的有两个开源项目。 一个是:Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 SQLParser 另一个是&#xff…