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

网站不备案能用吗/有人看片吗免费观看视频

网站不备案能用吗,有人看片吗免费观看视频,怎么通过贷款网站找做贷款客户,做网站用java好还是c博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access to it. 一个类仅仅只有一个实例,并且提供全局的接入点。简洁点理解就是涉及到一个单一的类,该类负责创建自己的…

博文原址:折腾Java设计模式之单例模式

单例模式

Ensure a class has only one instance, and provide a global point of access to it.

一个类仅仅只有一个实例,并且提供全局的接入点。简洁点理解就是涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问它自己唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

饿汉式单例模式

public final class EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton();private EagerSingleton() {}public static EagerSingleton getInstance() {return INSTANCE;}
}
复制代码

基于 classloader 机制避免了多线程的同步问题,不过INSTANCE在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用 getInstance 方法。类在加载时就初始化了,会浪费空间,因为不管你用还是不用,它都创建出来了,但是因为没有加锁,执行效率较高。

懒汉式单例模式

/*** 懒汉式的单例模式-线程不安全的*/
public final class LazyThreadNotSafeSingleton {private static LazyThreadNotSafeSingleton INSTANCE;private LazyThreadNotSafeSingleton() {}public static LazyThreadNotSafeSingleton getInstance() {if (null == INSTANCE) {INSTANCE = new LazyThreadNotSafeSingleton();}return INSTANCE;}
}
复制代码
/*** 懒汉式的单例模式-线程安全的*/
public final class LazyThreadSafeSingleton {private static LazyThreadSafeSingleton INSTANCE;private LazyThreadSafeSingleton() {}public static synchronized LazyThreadSafeSingleton getInstance() {if (null == INSTANCE) {INSTANCE = new LazyThreadSafeSingleton();}return INSTANCE;}
}
复制代码

有上述两种懒汉式单例模式,区别在与静态工厂方法getInstance是否加了synchronized修饰来进行同步,用于支持线程安全。懒汉式,在其加载对象的时候是不会创建对象实例的,只有等它真正使用的时候才会创建,如果一直没有使用则一直不会创建,能够避免内存浪费,也就是只有第一次调用的时候才会创建。但是加锁synchronized就影响了性能和效率,导致getInstance方法的性能受影响,此种方式也不推荐。寻找一种既能线程安全又可以延迟加载的方式。

双检查锁的单例模式

/*** 双检查锁的单例模式-线程安全*/
public final class DoubleCheckLockingSingleton {private static volatile DoubleCheckLockingSingleton INSTANCE;private DoubleCheckLockingSingleton() {}public static DoubleCheckLockingSingleton getInstance() {// 第一次检查实例是否存在,如果存在即可返回,不存在则进入同步块if (null == INSTANCE) {// 同步块,线程安全synchronized (DoubleCheckLockingSingleton.class) {// 第二次检查实例是否存在,如果还不存在则会真正的创建实例if (null == INSTANCE) {INSTANCE = new DoubleCheckLockingSingleton();}}}return INSTANCE;}
}
复制代码

双检查加锁的方式,能实现线程安全,又能减少性能的影响。双检查加锁,旨在每次调用getInstance方法都需要同步,但是先不会同步,在第一次判断实例是否存在后,如果不存在才进入同步块,进入同步块后,第二次检查实例是否存在,如果不存在,在同步块内创建实例。如此只有首次才会同步,从而减少了多次在同步情况下进行判断所浪费的时间。双检查加锁机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。但是实现过程稍微复杂点。

静态内部类Holder式单例模式

/*** 静态内部类Holder式单例** 延迟加载和线程安全*/
public final class LazyInitializationHolderSingleton {private LazyInitializationHolderSingleton() {}public static LazyInitializationHolderSingleton getInstance() {return InstanceHolder.INSTANCE;}/*** 延迟加载*/private static class InstanceHolder {private static final LazyInitializationHolderSingleton INSTANCE = new LazyInitializationHolderSingleton();}
}
复制代码

getInstance方法第一次被调用的时候,它第一次读取InstanceHolder.INSTANCE,导致InstanceHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静态域,从而创建Singleton的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个域的访问,因此延迟初始化并没有增加任何访问成本。其中使用到类的静态内部类和多线程缺省同步锁。

静态内部类

静态内部类指,有static修饰的成员式内部类。如果没有static修饰的成员式内部类被称为对象级内部类。类级内部类相当于其外部类的static成分,它的对象与外部类对象间不存在依赖关系,因此可直接创建。而对象级内部类的实例,是绑定在外部对象实例中的。静态内部类中,可以定义静态的方法。在静态方法中只能够引用外部类中的静态成员方法或者成员变量。静态内部类相当于其外部类的成员,只有在第一次被使用的时候才被会装载。

多线程缺省同步锁

在多线程开发中,为解决并发问题,主要是通过使用synchronized来加互斥锁进行同步控制。但是在某些情况中,JVM已经隐含地为您执行了同步,这些情况下就不用自己再来进行同步控制了。这些情况包括:

1.由静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时;

2.访问final字段时;

3.在创建线程之前创建对象时;

4.线程可以看见它将要处理的对象时

枚举类型的单例模式

/*** 采用枚举类型的单例模式*/
public enum SingletonEnum {INSTANCE;@Overridepublic String toString() {return getDeclaringClass().getCanonicalName() + "@" + hashCode();}public void something(){//do something...}}
复制代码

简洁,自动支持序列化机制,绝对防止多次实例化。《高效Java 第二版》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。

总结

不建议使用懒汉式,简单的阔以使用饿汉式。涉及到反序列化创建对象时阔以使用枚举方式。如果考虑到延迟加载 的话,阔以采用静态内部类Holder的模式。如果对业务需求有特殊要求的时候阔以采用双检查锁的单例。

参考

源码地址

单例模式|菜鸟教程

《JAVA与模式》之单例模式

欢迎关注了解最新动态更新

转载于:https://juejin.im/post/5cc2564d6fb9a031ea19cf60

http://www.lbrq.cn/news/54307.html

相关文章:

  • 北京企业网站开发/域名注册万网
  • 动态网站建设常用技术不包括/沧州网站seo公司
  • 文章收费wordpress/seo排名软件价格
  • 泰安网站建设泽讯/免费做网站自助建站
  • 成都科技网站建设咨/好123上网主页
  • 分析网站统计对网络营销的价值/利于seo的建站系统有哪些
  • 汕头自助建站软件/做个网站需要多少钱
  • 怎么建设自己收费网站/系统优化app
  • 织梦网站开发视频教程/市场营销公司有哪些
  • 视频优化网站怎么做/明星百度指数排名
  • wordpress头像怎么设置/欧美seo查询
  • 江苏机械加工网/seo网络推广课程
  • 无锡 网站开发/搜索引擎是指什么
  • 网站建设的日程安排/bt蚂蚁
  • vps云主机可以做网站/微软bing搜索引擎
  • 东莞形象设计公司/宁波seo关键词如何优化
  • 金融公司网站规划方案/站长之家网站排名
  • 南安市住房和城乡建设部网站/网络营销有哪些模式
  • 企业网站的建设报价/百度投诉中心24小时电话
  • 凡客诚品购物流程设计/seo学校培训课程
  • 临沂医院手机网站建设/如何找外包的销售团队
  • 库尔勒网站商城建设/杭州seo网络推广
  • 企业 cms/网站seo关键词优化排名
  • 四川工程信息网官网/优化营商环境工作总结
  • 网站建设流程视频/整站多关键词优化
  • 西安网站快速备案/hyein seo
  • 外贸led网站建设/杭州seo顾问
  • 外贸网站推广公司最大/关键词营销优化
  • mvc net跳转到另一网站/新媒体运营岗位职责
  • 网络seo优化/seo门户网价格是多少钱
  • Selector的用法
  • mysql——搭建MGR集群
  • 2025年中国品牌全球化发展分析:中国品牌在社交渠道、电商平台及官网流量方面显著增长
  • 在百亿流量面前,让“不存在”无处遁形——Redis 缓存穿透的极限攻防实录
  • 前端面试专栏-工程化:25.项目亮点与技术难点梳理
  • 【网络安全】大型语言模型(LLMs)及其应用的红队演练指南