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

六安网站制作费用合肥建设银行招聘网站

六安网站制作费用,合肥建设银行招聘网站,铜陵seo公司,python做网站显示表格单例模式 单例模式饿汉式懒汉式 单例模式 解释#xff1a;一个类只能有一个实例 单例模式可以分为两种 饿汉式 和 懒汉式 饿汉式 也被称为预加载#xff0c;即 在加载类的时候#xff0c;就将实例创建出来#xff0c;加载到内存#xff0c;不管之后会不会使用这个实例 … 单例模式 单例模式饿汉式懒汉式 单例模式 解释一个类只能有一个实例 单例模式可以分为两种 饿汉式 和 懒汉式 饿汉式 也被称为预加载即 在加载类的时候就将实例创建出来加载到内存不管之后会不会使用这个实例 主打一个饥不择食体现了贪心的思想。 public class HungrySingleton {//方式1静态变量private static HungrySingleton instance new HungrySingleton();//方式2静态代码块/*static {instance new HungrySingleton();}*///方式3枚举可以看 EnumSingleton.classpublic static HungrySingleton getInstance(){return instance;} } 很明显我们还没有使用该对象就已经加载到了内存浪费内存 但是同时因为只有一此创建对象所以饿汉式是线程安全的 懒汉式 也成为懒加载即只有在使用该类时才创建需要的对象。 我很懒你不用我我就不创建对象 一般有四种实现方式 简单懒汉式不能用线程不安全Synchronized 同步方法一般不用线程安全但锁粒度太大效率较低双重检查锁可以用注意使用volatile 关键字保证单例对象的原子性静态内部类推荐使用 public class LazySingleton {private volatile static LazySingleton instance;/*** 简单懒汉式* 问题线程不安全一般不用* return*/public static LazySingleton getInstance01() {if(null instance){instance new LazySingleton();}return instance;}/*** synchronized* 解决了线程安全问题但效率低一般不用* return*/public synchronized static LazySingleton getInstance02() {if(null instance){instance new LazySingleton();}return instance;}/*** 双重检查锁模式* 降低锁的粒度只锁创建对象的代码块* 需要增加 volatile 来保证原子性防止jvm指令重排但同时屏蔽了JVM的一些代码优化* return*/public static LazySingleton getInstance03() {if(null instance){synchronized (LazySingleton.class){if(null instance){//防止重复创建对象instance new LazySingleton();}}}return instance;}/*** 静态内部类方式* 只有在使用时才会创建静态内部类推荐使用* return*/public static LazySingleton getInstance04() {return SingletonHolder.INSTANCE;}private static class SingletonHolder{private static final LazySingleton INSTANCE new LazySingleton();} }这里解释下 为什么 双重检查锁要 使用 volatile 关键字 修饰单例对象 if判断以及其内存执行代码是非原子性的。其次new LazySingleton()无法保证执行的顺序性。 显然不满足原子性或者顺序性线程肯定是不安全的。 下面主要讲一下 new LazySingleton() 为什么不能保证顺序性。 设想一下创建一个对象应该分为几步 答案是三步如下 memoryallocate();//1:初始化内存空间 ctorInstance(memory);//2:初始化对象 instancememory();//3:设置instance指向刚分配的内存地址 jvm为了提高程序执行性能会对没有依赖关系的代码进行重排序也就是说上面2和3行代码可能被重新排序。 我用两个线程举例 时间片线程A线程Bt1初始化内存空间t2设置instance指向刚分配的内存地址t3判断instance 是否为空t4由于instanc不为空获取到一个空的实例化对象线程不安全t5初始化对象 volatile 关键字就是强制要求jvm 不进行指令重排按顺序执行当然也有一定的性能损失 volatile 其他相关知识 可以参考以下文章 https://blog.csdn.net/m0_50370837/article/details/124380385
http://www.w-s-a.com/news/466516/

相关文章:

  • 广州学做网站视频代做网站
  • 沈阳公司建站seo课程培训班
  • 杭州做微信网站软件公司网站建设毕业设计中期进度报告
  • 怎么做谷歌这样的网站如何建立一个网站放视频
  • 园区网站建设调研报告北京朝阳区哪里有网站开发
  • 网站角色权限wordpress 优化版
  • 购物网站ppt怎么做网络公司注册多少钱
  • 学做衣服上什么网站好贴吧高级搜索
  • 贵州 跨境电商网站建设做淘宝店铺有哪些好的网站
  • 广州正规网站制作公司网站搭建公司
  • ui设计零基础好学吗珠海网站建设优化推广
  • 网站开发多少费用火车头采集wordpress发布时间
  • 有没有做皮艺的网站教育培训网站建设ppt
  • 建设外贸商城网站制作如何建设景区旅游网站
  • 网站建设服务的具体条件怎么建设一个响应式网站
  • 做flash的网站wordpress设置前台投稿
  • 商务网站开发文档迅雷资源做下载网站
  • 无极磁铁网站如何把地图放到自己做的网站上
  • 青浦赵巷网站建设公司网站开发需求文档
  • 苏州网站建设的公司哪家好无锡网站制作那些
  • 装饰公司网站模板科技成果鉴定机构
  • 给公司做的东西放到私人网站上十堰为企业做网站的单位
  • 手机网站建设价钱手机自己做网站
  • 网站建设属于哪种公司电子商务查询网站
  • 工程建设标准强制性条文最新版本网站关键词排名优化应该怎么做
  • 网站网页设计内容品牌高端网站建设公司
  • 网站开发报价 福州中国建筑网官网手机版
  • 网站 图片 自动往右移专门做定制化的网站
  • 最好用的cms手机百度关键词排名 网站优化软件
  • 凉山州城乡规划建设局网站长沙网站建设哪家强