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

厦门市建设执业资格管理中心网站ps软件手机版下载

厦门市建设执业资格管理中心网站,ps软件手机版下载,北京网页制作服务,中国交通建设监理协网站一、写在前面 设计模式有23种#xff0c;每一篇是一种模式#xff0c;从简单到难#xff0c;第一篇从最简单的单例模式试试水创建型模式 单例模式工厂方法模式抽象工厂模式原型模式建造者模式 结构型模式行为型模式 二、介绍 单例模式是指一个类只能创建出一个对象#…一、写在前面 设计模式有23种每一篇是一种模式从简单到难第一篇从最简单的单例模式试试水创建型模式 单例模式工厂方法模式抽象工厂模式原型模式建造者模式 结构型模式行为型模式 二、介绍 单例模式是指一个类只能创建出一个对象比如数据库连接池、日志记录。在开发中用到的很多单例设计模式分类成两种 饿汉式类加载就会导致该单实例对象被创建懒汉式类加载不会导致该单实例对象被创建而是首次使用该对象时才会创建 在使用单例模式时要明确或注意以下几点 1将构造方法写成私有的防止外部调用构造方法2应该在类的属性中修饰成static我一开始觉得这只是为了确保实例能通过类名在全局访问但是在研究了Java虚拟机之后其实这么做最核心的原因是static变量会随着类被初次访问而初始化并且在整个程序的生命周期中这个对象不会被动销毁。这对于单例模式来说至关重要因为它保证了单例对象在程序运行期间的唯一性和持久性。 三、饿汉式 1、饿汉式一 /** * 饿汉式 * 静态变量创建类的对象 */ public class Singleton { //私有构造方法 private Singleton() {} //在成员位置创建该类的对象 private static Singleton instance new Singleton(); //对外提供静态方法获取该对象 public static Singleton getInstance() { return instance; } }该方式在成员位置声明Singleton类型的静态变量并创建Singleton类的对象instance。instance对象是随着类的加载而创建的。如果该对象足够大的话而一直没有使用就会造成内存的浪费。还有一种方法是在static块中new但是根据JVM类加载器的执行顺序本质上效果并没有区别就不放代码了~ 2、饿汉式二枚举比较直观就不解释了 public enum Singleton { INSTANCE; }四、懒汉式 在使用懒汉式创建时需要提供一个getInstance接口public需要使用这个类的对象时对其进行调用 1、懒汉式一线程不安全 public class Singleton { //私有构造方法 private Singleton() {} //在成员位置创建该类的对象 private static Singleton instance; //对外提供静态方法获取该对象 public static Singleton getInstance() { if(instance null) { instance new Singleton(); } return instance; } }为什么线程不安全呢 如果有两个线程A和B同时调用这个方法A和B同时发现instance为null就会都new一个对象造成的结果就是最终有两个对象违反了单例模式 2、懒汉式2双重检查锁单例模式的最优解 public class Singleton {//私有构造方法private Singleton() {}private static volatile Singleton instance;//对外提供静态方法获取该对象public static Singleton getInstance() {//第一次判断如果instance不为null不进入抢锁阶段直接返回实际if(instance null) {synchronized (Singleton.class) {//抢到锁之后再次判断是否为空if(instance null) {instance new Singleton();}}}return instance;} }此方法使用的是饿汉式所以不存在内存浪费的问题首先我们假设有A、B两个线程。进入getInstance方法后需要判断是否创建对象如果没有创建我们假设A和B同时进入。然后我们用字节码文件做锁对象A和B只有一个线程能拿到锁假设A先拿到了另一个B在自旋等待。接着A进入之后发现单例对象为null会正常new一个对象出来然后释放锁接下来B因为此时在自旋等待当A释放锁之后B进入了但单例对象此时已经不为null了就不会执行new最后两个线程也只会创建一个单例对象并且没有空间浪费的问题volatile是一个关键字用于确保多线程环境下的变量可见性和禁止指令重排序优化。当一个变量被声明为volatile时它意味着 可见性当一个线程修改了一个volatile变量的值新值对其他线程是立即可见的。这确保了线程之间共享变量的状态始终是最新的。禁止指令重排序volatile关键字可以禁止JVM的指令重排序优化从而确保程序执行的顺序性。
http://www.w-s-a.com/news/496169/

相关文章:

  • 创意设计网站公司手机wap网站建设多少钱
  • 甘肃省第八建设集团公司网站seo高级优化方法
  • 精美的商城网站介绍最多人用的wordpress子主题
  • 检察门户网站建设情况俄外长抵达北京
  • 老电脑做网站服务器网站在线留言如何做
  • 南宁广告公司网站建设小程序源码破解
  • 沛县做网站xlec网站建设开发方式包括哪些方面
  • 山西网站建设 哪家好四川城乡和建设厅网站
  • 有瀑布流的网站小型商城网站
  • 百石网怎么做网站二次开发软件
  • 网站域名是什么东西制作网页哪家好
  • 合肥网站建设团队简述网站内容管理流程
  • 网站广告是内容营销吗wordpress增加背景图片
  • 网站建设技术jsp课程设计响应式布局网站开发
  • 东莞网站排名优化seo套路网站怎么做的
  • 我做网站网络建站一般多少钱
  • 如何快速提升网站关键词排名房地产网站开发毕业设计
  • 做网站 提交源码 论坛sem分析是什么意思
  • 网站建设与部署阿里云大学百度付费推广有几种方式
  • 作品集怎么做网站个人简历模板免费下
  • 工业网站素材重庆关键词自动排名
  • 拖拽式网站建设费用微网站怎么做的好名字
  • 长沙电信网站备案谷歌推广怎么做最有效
  • 网站建设与管理总结报告华为开发者联盟
  • 门诊部网站建设天空建筑网站
  • 扬州市城乡建设网站高端品牌鞋子有哪些牌子
  • 杭州网站建设招聘网长沙网络销售公司
  • 网站制作一年多少钱免费做电子章网站
  • 信誉好的营销网站建设徐州市铜山新区建设局网站
  • 建行网站关于我们山西seo和网络推广