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

威海网架公司优化网站首页

威海网架公司,优化网站首页,网页设计图片代码怎么写,做冰饮视频网站概述 为何需要单例模式#xff08;Singleton Pattern#xff09;? 在程序运行当中#xff0c;我们只希望一个类只能创建一个对象#xff0c;在多个地方可以公用这个唯一的对象。 特点#xff1a; 必须保证类只能创建一个对象。 单例模式可分为#xff1a;饿汉式和懒…概述 为何需要单例模式Singleton Pattern? 在程序运行当中我们只希望一个类只能创建一个对象在多个地方可以公用这个唯一的对象。 特点 必须保证类只能创建一个对象。 单例模式可分为饿汉式和懒汉式 1饿汉式 特点 类加载时程序一开始运行时该单例对象就被创建。 所谓饿饿肚子就马上干饭所以程序一运行就会被创建。 优点 没有出现线程安全问题。 缺点 浪费内存空间。如果创建一个非常大的实例到程序结束都没有被使用到就浪费了资源。同时也会导致程序运行很慢尤其在程序启动的时候。 2懒汉式 特点 类加载不会创建单例对象而是在程序运行中首次使用到单例对象时才会开始被创建。 所谓懒不需要时不会创建。需要时才去检查有没有实例化如果有就会返回实例对象没有则会创建一个。 缺点 线程不安全。在程序运行中可能会存在多个线程轮询干活。如果有多个线程同时判断是否有单例对象如果都判断没有就同时创建了多个对象。 1、饿汉式静态变量 public class Singleton{private Singleton() { }private static Singleton instance new Singleton();public static Singleton getInstance(){ return instance;}}2、饿汉式静态代码块 //通过静态代码块C# 不支持public class Singleton{private Singleton() { }private static Singleton instance;static { instance new Singleton();public static Singleton geetInstance() { return instance; }}3、懒汉式线程不安全 public class Singleeton{private Singleeton() { }private static Singleeton instance;public static Singleeton getInstance{get{if (instance null){instance new Singleeton();}return instance;}}缺点 如果有多个线程同时访问单例对象会可能存在上一个线程还没有创建好对象时而下一个线程因为判断该对象为空就重复创建一个对象。 4、懒汉式线程安全 public class Singleeton{private Singleeton() { }private static Singleeton instance;private static object lockobj new object();public static Singleeton getInstance(){//加锁的作用保证创建唯一的单例对象//缺点当单例对象创建好后仍会导致其他线程进行等待抢锁而不是直接返回该对象。lock(lockobj){if (instance null){instance new Singleeton();}}return instance;}}优点 解决了多个线程重复创建对象的问题。因为在单例对象判断是否存在前加了把锁说明需要等待上一个线程创建好单例对象了才能把执行权分配给下一个线程去执行 if 代码块。 缺点 影响性能。如果单例对象已经创建好其他线程为了使用该单例对象时仍然会进行排队抢锁从而增加了抢锁的时间而不是直接返回该对象。 5、懒汉式双重检查锁 public class Singleeton{private Singleeton() { }private static Singleeton instance;private static object lockobj new object();public static Singleeton getInstance(){//如果存在单例对象就直接返回该对象避免浪费排队强锁的时间。if (instance null){lock (lockobj){if (instance null){instance new Singleeton();}}}return instance;}}还存在缺点 在代码执行过程中会存在指令的执行顺序问题。即指令的执行顺序并不一定会按照我们编写的顺序执行。也就说系统可能会存在对指令重排序问题。所以这会导致程序不一定能及时拿到单例对象变量instance的最新值。这样即使能拿到不为空的 instance 变量也不确保这个变量是否完全被创建好。 6、懒汉式双重检查锁改进 public class Singleeton{private Singleeton() { }//改进在双重检查锁的代码中只在 instance 变量中加了修饰符 volatile.private static volatile Singleeton instance;private static object lockobj new object();//....}为何 instance 变量 需要使用 volatile 修饰符 如果 instance 变量去掉修饰符 volatile 的话就不能保证该代码执行的正确性。因为instance new SIngleton();这行代码并不是原子操作。原子操作不会被线程调度机制打断的操作中间的执行不会切换到另一个线程来操作也就是new 单例变量和单例对象具体创建的过程并不是由同一个线程执行的。 打个比方骑手送外卖。他一般工作的顺序就是送餐到达地点后然后联系顾客最后把餐丢到顾客嘴里。但是有时候呢他可能因为其他事情如赶时间等原因还没到送达点就先联系顾客说外卖到了。结果就是顾客开门没看到外卖就一直张着嘴结果吃的是西北风。 如果顾客在APP上设置了通知功能当骑手真的到送达点了就马上通知顾客。 这个例子就相当于 多线程顾客拿餐、骑手送外卖过程、外卖中途有其他事情等。instance new instance()顾客用餐。创建Instance骑手送餐、联系顾客送达这一过程。指令重排序骑手中途先联系顾客再到送达点。volatile一旦骑手到了送达点APP就会马上通知顾客。否则就继续等待用餐。 初始化对象的顺序问题 Java 有JVM同样的C#也会存在相似的运行环境即 CLR。 在运行环境中对类对象创建时会存在三个阶段执行 1为变量分配内存2初始化变量3将变量指向分配的内存空间 如果系统存在重排序就可能会出现执行顺序问题。也就是说系统可能存在先执行第三步后执行第二步也可能会正常按顺序执行。前者的执行顺序会导致变量还没有初始化完成其他线程就已经判断了该变量值不为空然后返回一个没有初始化完成的单例对象。 volatile的作用 1保证并发编程的可见性不保证原子性 单线程时重排序无影响但是多线程就有可能会读取到脏数据这就需要用 volatile。使用 volatile 修饰的变量线程在每次使用变量的时候都会读取变量修改后的最新值。 2禁止指令重排序 用 volatile 修饰保证执行顺序。
http://www.zqtcl.cn/news/374521/

相关文章:

  • 凡科平台网站怎么建设广州网站建设信科网络
  • 网站建设公司的服务特点seo实战密码电子书
  • 网站开发保密协议范本北京市建设工程信息网查询
  • 怎样跟网站做优化呢wordpress实现新闻列表
  • 济南手机网站定制费用wordpress安装文档下载
  • 麻涌镇网站仿做郑州做网页的公司
  • 做那个网站中山免备案网站建设
  • 软路由系统如何做网站全网营销式网站
  • 中国建设网官方网站视觉网站建设
  • 苏州乡村旅游网站建设策划书.docincapsula wordpress
  • 百度收录自适应网站滨海做网站哪家公司好
  • 东莞网站排名优化公司福田在线官网
  • 清湖网站建设天猫开店流程及费用2023
  • 邵阳建设网站公司网站建设构架
  • 怎样做网站卖网站网络营销概念
  • 怎样做网站能百度能搜到设计网站公司哪里好
  • 网站收缩栏专业定制网站公司
  • 烟台网站建设方案托管无锡网站制作企业
  • 网站网页是怎么做的用什么做网站 优化
  • 数据网站怎么做的网站开发的开题报告引言
  • 苏州专业网站制作设计做网站上海
  • 做网站可以用中文域名备案嘛山东省住房和城乡城乡建设厅网站
  • 网站建设推广多少钱站长工具seo综合查询关键词
  • 分类信息网站平台的推广做网站的花费
  • 还原wordpress站点地址恢复网站都要备案吗
  • 如何建立营销性企业网站论文如何修改wordpress
  • 全网营销销售郑州seo网站管理
  • dw怎么做网站首页邯郸网站建设品牌加盟
  • 辽宁省建筑工程造价信息网深圳市seo点击排名软件价格
  • 网站建设宗旨是指建设中英文网站