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

宁波自助建站网站wordpress oss 防盗链

宁波自助建站网站,wordpress oss 防盗链,深圳企业高端网站建设,淘宝网络营销推广方式文章目录 什么是单例模式#xff1f;饿汉模式懒汉模式版本一#xff1a;最简单的懒汉模式版本二#xff1a;考虑懒汉模式存在的线程安全问题版本三#xff1a;更完善的解决线程安全问题版本四#xff1a;解决指令重排序问题 什么是单例模式#xff1f; 单例模式#xf… 文章目录 什么是单例模式饿汉模式懒汉模式版本一最简单的懒汉模式版本二考虑懒汉模式存在的线程安全问题版本三更完善的解决线程安全问题版本四解决指令重排序问题 什么是单例模式 单例模式是一种常见的设计模式。即一些大佬针对一些常见的需求场景整理出来的一些解决方案。我们只需要套用模式就可以解决问题极大的便利了我们的开发。 具体来说单例模式就要求某个类只能有一个实例。 那在Java中怎么实现呢 我们就会想到“static”这个关键字static修饰的成员/属性就会变成类成员/属性。当属性变成类属性的时候其实就已经是“单例”的了。因为JVM在加载类的时候只加载一次这个类是“单例”的那么它包含的属性更是“单例”的。 借助static实现“单例模式”有两种模式饿汉模式和懒汉模式 饿汉模式 //饿汉模式 在类加载阶段就创建了实例 实例创建的时机非常早 非常急迫 class Singleton{// static 修饰的变量是类对象的成员变量 JVM加载时只加载一次private static Singleton instance new Singleton();public static Singleton getSingleton() {return instance;}// 设置私有的构造方法 防止有人不通过getSingleton方法来获取到我们规定的单个示例 而是在别的类中new Singleton来创建实例private Singleton(){} }注 Singleton类的构造方法应该设置为私有的防止别人不使用我们已经创建好的实例再创建新的实例。instance应该被private static修饰构造方法被设置为私有的后只有通过一个公共的static方法才能获取到实例在类加载的时候就创建了实例创建实例的时机非常紧迫所以叫“饿汉模式” 懒汉模式 版本一最简单的懒汉模式 //懒汉模式在需要使用到实例的时候再创建实例创建实例的时机不紧迫 class SingletonLazy{private static SingletonLazy instance null;public static SingletonLazy getInstance(){if (instance null){instance new SingletonLazy();}return instance;}private SingletonLazy(){} }注 在首次调用到getInstance的时候才会创建实例后续再调用到getInstance的时候直接返回已经创建好的实例。饿汉模式的效率更高。原因一如果后续没人需要使用到实例则创建实例的过程就被节省下来了原因二在类加载的过程中JVM需要做的工作非常多。把创建实例的过程延后可以给JVM减轻点负担。 版本二考虑懒汉模式存在的线程安全问题 在饿汉模式中调用到getInstance方法只涉及到读操作不会有线程安全问题。 在懒汉模式中调用到getInstance方法会进行判断后再创建实例既涉及到读又涉及到修改。在多线程环境下就有可能创建多个实例违背了单例模式 // 线程安全的懒汉模式 class SingletonLazy{private static SingletonLazy instance null;public static SingletonLazy getInstance(){//加锁 保证线程安全 只能创建单个实例synchronized (SingletonLazy.class) {if (instance null) {instance new SingletonLazy();}}return instance;}private SingletonLazy(){} }版本三更完善的解决线程安全问题 像上面那样直接加锁我们虽然可以保证线程是安全的。但是有一个新的问题懒汉模式只有在第一次创建实例的时候才有线程安全问题后续使用实例的时候直接返回实例就行不需要加锁判断。但是像上面那样在线程安全时也会加锁降低了代码执行效率。 // 懒汉模式更加完善的解决线程安全问题 class SingletonLazy{private static SingletonLazy instance null;public static SingletonLazy getInstance(){//判断是否需要加锁if (instance null) {synchronized (SingletonLazy.class) {// 判断是否已经创建实例//这个if不可少 当线程1 2 同时调用getInstance方法时 线程1执行完会创建实例// 如果没有if 线程2来了不知道是否已经有实例了 还会继续创建实例if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy(){} }注两个if都必不可少各自有各自的作用第一个if在已经创建实例后判断释放需要继续加锁第二个if在没有创建实例时防止创建多个实例。 版本四解决指令重排序问题 一个新的问题 new操作分为三步粗略 1.申请内存 2. 初始化实例 3. 将内存首地址赋值给instance 编译器可能进行指令重排序的优化 ,比如 线程1 将1-2-3 的执行顺序 改为 1-3-2 并且在执行完1-3后 线程2调用getInstance 。线程2看到instance里已经有了地址就会直接返回 但是未初始化。在后续调用实例的属性/方法时会有问题 class SingletonLazy{//加上volatile 禁止指令重排序private volatile static SingletonLazy instance null;public static SingletonLazy getInstance(){if (instance null) {synchronized (SingletonLazy.class) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy(){} }
http://www.dnsts.com.cn/news/231025.html

相关文章:

  • 广西智能网站建设制作顺德网站建设渠道
  • 流量查询网站python安卓app开发
  • 网站建设选亿企网络wordpress主题熊掌号
  • 哈尔滨建站人wordpress cms下载
  • 培训网站建设方案模板网页设计字体颜色代码
  • 返利网站开发计划书做微商哪个网站好
  • 如果网站没有做icp备案会被处罚广东莞业工程设计有限公司
  • 网站seo置顶 乐云践新专家安庆经济开发区人才网
  • 陕西网站建设电话国内免费的短视频素材网站
  • 空气源热泵热水器网站建设百度企业邮箱注册申请
  • 网站建设与优化推广方案内容哈尔滨双城区建设局网站
  • 做网站的时候表格怎么去掉容桂微信网站建设
  • 广州注册公司网上申请入口关键词优化排名的步骤
  • 网站升级通知自动跳跃发簪做的比较好的网站
  • 高端网站开放品牌购买网站
  • 做百度网站排怎么开通公众号
  • 仿站网站开发网站建设管理与维护ppt
  • 企业网站建设尚未实现宣传功能哪个网站做汽车保养比较好
  • 网站服务费网络建设会计分录百度地图嵌入wordpress
  • 济阳县做网站公司怎样做废旧网站
  • 中国水电建设集团网站阿里云怎样做商城式网站
  • 网站建设电话销售工作总结平面设计和电子商务哪个好
  • 在线查询网站开发语言烟台做网站哪家好
  • 网站后台路径建e室内设计网官网模型
  • 网站开发电话网站建设口号
  • 贡嘎网站建设顺德网站建设教程
  • 查询网站的二级域名大型网站开发教程
  • 网站多语言界面建设方案html友情链接
  • 深圳专业企业网站建开发一个公司官网一般多少钱
  • 网站举报中心官网深圳最大的广告公司