当前位置: 首页 > news >正文

中卫网站推广网络营销爱查企业在线查询

中卫网站推广网络营销,爱查企业在线查询,网站开发技术选型,iis 没有新建网站文章目录 前言如何实现一个双重校验锁 DCL定义一个单例变量定义一个获取单例的方法性能优化性能优化带来的一点点问题什么是指令重排#xff1f; 总结如何理解文章开篇理解的三个问题1、为什么需要使用两个 if 语句#xff1f;2、为什么使用了 synchronized 关键字还需要使用… 文章目录 前言如何实现一个双重校验锁 DCL定义一个单例变量定义一个获取单例的方法性能优化性能优化带来的一点点问题什么是指令重排 总结如何理解文章开篇理解的三个问题1、为什么需要使用两个 if 语句2、为什么使用了 synchronized 关键字还需要使用 volatile 关键字3、双重校验锁使用需要注意的问题 个人简介 前言 hello大家好我是 Lorin今天给大家带来双重校验锁的灵魂三问以及我们如何一步步实现一个懒汉式单例。开始阅读前大家可以思考下面三个问题 DCL 实现中 1、为什么需要使用两个 if 语句 2、为什么使用了 synchronized 关键字还需要使用 volatile 关键字 3、双重校验锁使用需要注意的问题如何实现一个双重校验锁 DCL 双重校验锁 DCL 最常用使用的场景在懒汉式单例下面我们按照思路简单实现一个懒汉式单例 定义一个单例变量 public class SingletonDemo {private static Object object null; }定义一个获取单例的方法 定义一个单例的获取方法用于单例的初始化和获取为了支持多线程访问我们这里使用 synchronized 进行同步保证同一时刻只有一个线程访问。 public class SingletonDemo {private static Object object null;// 初始化和获取实例public Object getObject() {synchronized (SingletonDemo.class) {if (object null) {object new Object();}return object;}} }性能优化 上面的懒汉式单例看起来并没有多大的问题但是却存在很大的性能的问题因为我们每次获取我们的实例都需要进行锁的获取和释放即使我们的实例已经初始化完成因此为了解决这个问题我们需要进行一点点优化。 public class SingletonDemo {private volatile static Object object null;public Object getObject() {// 如果实例已经初始化完成直接返回实例不获取锁if (object ! null){return object;}synchronized (SingletonDemo.class) {if (object null) {object new Object();}return object;}} }性能优化带来的一点点问题 上面的代码表面上看起来已经完美了解决了并发问题也优化了性能问题但是仔细看你会发现了新的问题由于处理指令重排的优化可能导致 object ! null 判断并不准确怎么理解呢 创建一个对象分为初始化和实例化两部分大致可以分为以下几步1、在堆中申请一份内存 2、创建对象 3、将 object 指向我们对象的内存引用如果没有指令重排的情况下我们拿到的对象一定是完整的对象但是可能存在指令重排优化上面的顺序可能变成下面这样1、申请一份内存 2、将 object 指向我们对象的内存引用 3、创建对象那么我们将会拿到一个没有实例化完成的对象因此我们需要禁止指令重排Java 提供了 volatile 指令来禁止指令重排。题外话我们写代码的过程其实就是不断在重复优化和解决的问题直到达到适应我们目前场景、基本情况的最优解不一定是理论的最优解。 什么是指令重排 为了提升执行速度/性能计算机在执行程序代码的时候会对指令进行重排序。什么是指令重排简单来说就是系统在执行代码的时候并不一定是按照程序的代码的顺序依次执行。 指令重排可以保证单线程串行语义一致as-if-serial但是没有义务保证多线程间的语义也一致所以在多线程下指令重排可能会导致一些问题。 关于指令重排更多内容可以参考 一文读懂 Java Memory Model(JMM) 最后我们得到了终极版本的代码 public class SingletonDemo {private volatile static Object object null;public Object getObject() {// 如果实例已经初始化完成直接返回实例不获取锁if (object ! null){return object;}synchronized (SingletonDemo.class) {if (object null) {object new Object();}return object;}} }总结 如何理解文章开篇理解的三个问题 1、为什么需要使用两个 if 语句 为了性能优化 2、为什么使用了 synchronized 关键字还需要使用 volatile 关键字 性能优化导致带来了多线程指令重排问题需要使用 volatile 解决指令重排的问题。 3、双重校验锁使用需要注意的问题 JDK版本大于1.5Volatile 屏蔽指令重排序的语义在 JDK1.5 中才被完全修复此前的 JDK 中即使将变量声明为 volatile 也仍然不能完全避免重排序所导致的问题关于 Volatile 相关介绍可以参考 Volatile 相关章节。 个人简介 你好我是 Lorin 洛林一位 Java 后端技术开发者座右铭Technology has the power to make the world a better place. 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。 作为一个 Java 后端技术爱好者我不仅热衷于探索语言的新特性和技术的深度还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。 在我的博客上你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法以帮助你更好地掌握Java编程。 我鼓励互动和建立社区因此请留下你的问题、建议或主题请求让我知道你感兴趣的内容。我期待与你一起在技术之路上前进一起探讨技术世界的无限可能性。 保持关注我的博客让我们共同追求技术卓越。
http://www.hkea.cn/news/14362168/

相关文章:

  • 创建网站需要哪些过程关键词歌词简谱
  • 建设银行网站会员登陆wordpress 添加设置方法
  • 嘉兴网络项目建站公司建设掌上银行官方网站
  • 广安门外网站建设403网站打开免费
  • 做网站备案要处省的电话号码自己做的网站可以卖
  • 网站内容的重要性电子商务网站建设与实例
  • 遵义网站制作教程太原网站建设模板站
  • 做网站一班需要多少钱中国农业建设网站
  • 爱狼戈网站建设网站建设方案及预算
  • 360网站建设公司直播网站开发平台
  • 阿里巴巴网站首页怎么制作秦州区建设局网站
  • 重庆专业微信网站制作诸城网站建设公司排名
  • 表情包制作网站wordpress实现下载功能
  • 电子商务网站采用的开发技术做海鱼的网站
  • 如何做网站知乎大庆网站建设黑icp备1900
  • 山东省网站备案郑州专业做网站
  • 网站综合营销方案wordpress apply_filter
  • 泰安建材网站建设电话wordpress背景图更改
  • 专门做字体设计的网站用PS怎么做网站界面
  • 做网站界面多少钱做100个网站效果图
  • 临汾哪里有做网站的做视频解析网站是犯法的么
  • 北京一家专门做会所的网站专门做网上链接推广的网站
  • 做企业网站时需要注意哪些地方定制网站制作公司
  • 高端建站神器做网站卖高仿
  • 中国空间站实时位置天水 网站建设
  • 哪个公司网站备案快濮阳网站建设费用
  • 网站设计在营销中的作用建筑公司logo
  • 打码网站怎么做接口站酷网设计素材
  • html5 国外网站php网站开发实用技术下载
  • 做的网站为什么手机上搜不到网站建设的公司联系方式