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

社交网站开发技术岗炫酷网站源码

社交网站开发技术岗,炫酷网站源码,建筑工具网站,家在深圳 业主论坛一、单例模式的概念 1.1 单例模式的概念 单例模式#xff08;Singleton Pattern#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式#xff0c;它提供了一种创建对象的最佳方式。就是当前进程确保一个类全局只有一个实例。 1.2 单例模式的优…一、单例模式的概念 1.1 单例模式的概念 单例模式Singleton Pattern是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。就是当前进程确保一个类全局只有一个实例。 1.2  单例模式的优点 单例模式在内存中只有一个实例减少了内存开支单例模式只生成一个实例所以减少了系统的性能开销单例模式可以避免对资源的多重占用单例模式可以在系统设置全局的访问点 1.3 单例模式的缺点 单例模式一般没有接口扩展很困难单例模式不利于测试单例模式与单一职责原则有冲突 1.4 使用场景 要求生成唯一序列号的环境在整个项目中需要一个共享访问点或共享数据创建一个对象需要消耗的资源过多需要定义大量的静态常量和静态方法如工具类的环境 2.懒汉式 懒汉式顾名思义就是实例在用到的时候才去创建“比较懒”用的时候才去检查有没有实例如果有则直接返回没有则新建。 2.1 懒汉式加锁 public class Singleton {private static Singleton instance;private Singleton() {}public synchronized static Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;} }这种把锁直接方法上的办法所有的访问都需要获取锁导致了资源的浪费。 2.2 懒汉式双重校验锁 public class Singleton{//volatile修饰防止指令重排private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {//第一重校验检查实例是否存在if (instance null) {//同步块synchronized (Singleton.class) {//第二重校验检查实例是否存在如果不存在才真正创建实例if (instance null) {instance new Singleton();}}}return instance;}} 我们把synchronized加在了方法的内部一般的访问是不加锁的只有在instancenull的时候才加锁。 1为什么要双重校验 如果不双重校验。 如果两个线程一起调用getInstance方法并且都通过了第一次的判断instancenull那么第一个线程获取了锁然后实例化了instance然后释放了锁然后第二个线程得到了线程然后马上也实例化了instance。这就不符合我们的单例要求了。 2为什么要用volatile 修饰 instance 防止指令重排。 那这个重排指的是哪指的是instance new Singleton()我们感觉是一步操作的实例化对象实际上对于JVM指令是分为三步的 分配内存空间初始化对象将对象指向刚分配的内存空间 有些编译器为为了性能优化可能会把第二步和第三步进行重排序顺序就成了 分配内存空间将对象指向刚分配的内存空间初始化对象 3. 饿汉式 饿汉式就像它的名字饥不择食定义的时候直接初始化。 public class Singleton{private static Singleton instancenew Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}} 因为instance是个静态变量所以它会在类加载的时候完成实例化不存在线程安全的问题。 这种方式不是懒加载不管我们的程序会不会用到它都会在程序启动之初进行初始化。 4. 静态内部类 静态内部类是更进一步的写法不仅能实现懒加载、线程安全而且JVM还保持了指令优化的能力。 public class Singleton{private Singleton() {}private static class InnerSingleton {private static final Singleton instance new Singleton();}public static Singleton getInstance() {return InnerSingleton.instance;} }Singleton类被装载时并不会立即实例化而是在需要实例化时调用getInstance方法才会加载静态内部类InnerSingleton类从而完成Singleton的实例化。 类的静态属性只会在第一次加载类的时候初始化同时类加载的过程又是线程互斥的JVM帮助我们保证了线程安全。 5. 枚举 通过enum修饰Singleton单例类仅需定义一个INSTANCE然后在静态方法实例化方法getInstance中直接返回INSTANCE即可。 public enum Singleton {INSTANCE;public static Singleton getInstance(){return INSTANCE;} } 6 总结 饿汉模式:线程是安全的,只进行读操作 懒汉模式:不安全,有读操作也有写操作 单例模式的选择取决于具体需求如是否需要懒加载、是否需要线程安全等。每种实现方式都有其适用场景和潜在问题设计时应根据具体情况选择最合适的实现方法。
http://www.pierceye.com/news/232115/

相关文章:

  • 网站建设中html网页软件开发定制外包服务商
  • 山东seo网站推广河南定制网站建设企业
  • 网站建设文献文档单产品网站建设
  • 唐山网站建设自主开发宁波北仑做公司网站
  • 廊坊网页模板建站专业网站建设公司排名
  • 广州本地生活appseo百度百科
  • 成都产品网站建设镜像网站是怎么做的
  • 网站建设需求分析范例中国建设信息网站
  • 提供网站建设工具的品牌如何自己开个网站平台
  • 站长工具seo综合查询怎么去掉百家号查询排名数据查询
  • 网站怎么做商家定位注册网站不用手机短信验证的网站
  • 郑州医疗网站建设线下推广团队
  • 合肥网站推广 公司哪家好阿里云注销网站
  • 手机网站调用分享网站用户体验存在问题
  • 淘宝网官方网站路飞和女帝做h的网站
  • app网站设计制作360网站 备案
  • 网站建设多久能学会内丘网站建设案例
  • 网站设计要素 优帮云卖东西专业网站网上
  • 做古风人物小图的网站或软件东莞附近的网络推手公司
  • 东莞专业的单位网站建设江苏网站建设定制
  • 宁夏建设工程造价站网站东营网站seo外包
  • 推销网站建设今天重大新闻文字
  • 网站上线过程网站开发系统需求说明书
  • it外包行业江门seo网络推广
  • 深圳石岩建网站判断网站模板版本
  • 梅州市住房和城乡建设局网站东营网站
  • 免费手机端网站模板下载工具windows怎么做网站
  • 新乡网站自然优化本地电脑如何做网站服务器
  • 网站备案是域名备案还是服务器备案辽宁天一建设有限责任公司网站
  • 做网站的软件是什么阿里云官网入口