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

微信公众号搭建网站今天头条新闻

微信公众号搭建网站,今天头条新闻,网上开店的流程是什么,广东工业设计公司文章目录 单例模式1️⃣特性💪单例模式的类型与实现:类型懒汉式实现(线程不安全)懒汉式实现(线程安全)双重锁校验懒汉式(线程安全)饿汉式实现(线程安全)使用类的内部类实现⭐枚举方式实现单例(推荐)👍 单例…

文章目录

    • 单例模式1️⃣
      • 特性💪
      • 单例模式的类型与实现:
        • 类型
        • 懒汉式实现(线程不安全)
        • 懒汉式实现(线程安全)
        • 双重锁校验懒汉式(线程安全)
        • 饿汉式实现(线程安全)
        • 使用类的内部类实现⭐
        • 枚举方式实现单例(推荐)👍

单例模式1️⃣

单例模式是指在内存中只会创建且仅创建一次对象的设计模式。让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。

特性💪

  1. 唯一性:整个系统中,单例类只能有一个实例。
  2. 私有化构造函数:防止外部通过new关键字直接创建对象。
  3. 静态方法提供全局访问点:通常使用getInstance()方法来获取该类的唯一实例。
  4. 延迟实例化(懒加载):有些实现会在第一次调用getInstance()时才创建实例,以节省资源。

单例模式的类型与实现:

类型
  1. 懒汉式:在真正需要使用对象时才去创建该单例类对象
  2. 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
懒汉式实现(线程不安全)

只有当调用getInstance()方法时才会创建单例对象,这种方式实现了延迟加载,但是需要考虑多线程环境下的线程安全问题。

img

public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
  • 单例模式不允许外部直接创建,所以构造函数添加私有属性private
  • 这种方式满足懒汉式,但是在并发场景下,多个线程使用单例对象可能导致实例并存,从而违反了单例要求
懒汉式实现(线程安全)

上述懒汉式实现是线程不安全的(例如同时两个线程去获取单例对象,如果此时单例对象还未创建,可能会导致同事创建两个对象,从而违反单例),故我们要解决线程安全问题。

img

最容易想到的方法:使用锁(synchronized)给类加锁来保证线程安全

public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
双重锁校验懒汉式(线程安全)

但是上述方法每次获取对象的时候都要去先获取锁,并发性能不是很好

可以进行优化:(如果没有实例化则加锁创建,如果实例化了则直接获取,可以使得已经实例化的单例对象在获取单例对象时无需先获取锁,而是直接获取对象)

使用Double Check(双重校验) + Lock(加锁) 的写法:

public class Singleton {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;}
}

同时我们也使用了volatile关键字去确保instance变量的更新对所有线程都是立即可见的,并且禁止指令重排序,保证多线程环境下的正确性

  1. 防止指令重排序: 在多线程环境下,JVM为了优化性能可能会对指令进行重排序。对于单例对象的创建而言,构造函数内部的操作可能被重排序到对象引用赋值之后。例如,如果一个线程正在执行实例化操作,它可能会先将对象引用设置为非空(即指向一块内存),然后再完成对象的初始化。这种情况下,另一个线程可能看到的是一个部分初始化的对象(因为对象的引用不是null了),这会导致不可预测的行为或错误。volatile关键字可以禁止这种指令重排序,保证对象完全初始化之后才会被其他线程看到。
  2. 可见性保证volatile关键字确保了一个线程对共享变量(在这个场景下是单例对象的引用)的修改对于其他线程是立即可见的。也就是说,当一个线程成功创建了单例对象后,所有其他线程都能看到这个对象已经被正确地初始化了,而不会读取到旧的或者默认的值(如null)。这避免了多个线程同时创建多个实例的情况。
饿汉式实现(线程安全)

在类加载的时候就创建好单例对象,这种方式简单但不够灵活,因为它不能做到延迟加载。

public class Singleton{private static final Singleton singleton = new Singleton();private Singleton(){}public static Singleton getInstance() {return singleton;}
}

在类加载的时候,private static final Singleton singleton = new Singleton();这行代码已经实例化好了一个单例对象在内存中。

使用类的内部类实现⭐

利用了Java语言的类加载机制,只有当调用getInstance()方法时,内部类才会被加载,从而实现了懒加载和线程安全,同时不会因为加锁的方式耗费性能。

public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}
  • 这主要是因为JVM虚拟机可以保证多线程并发访问的正确性,也就是一个类的构造方法在多线程环境下可以被正确的加载。
  • 此种方式也是非常推荐使用的一种单例模式
枚举方式实现单例(推荐)👍

在Java中,使用枚举(Enum)来实现单例模式是一种非常简洁且高效的方法。枚举类型的单例不仅能够防止反射攻击和序列化导致的重复实例化问题,而且代码量极少,易于理解和维护。这是因为Java的枚举机制保证了每个枚举常量的唯一性,并且在类加载时自动初始化

public enum Singleton {INSTANCE;private final String property;// 初始化属性值Singleton() {this.property = "Some Value";}public String getProperty() {return property;}// 其他业务方法public void doSomething() {// 方法逻辑...}
}public class Client {public static void main(String[] args) {Singleton singleton = Singleton.INSTANCE;singleton.doSomething();System.out.println(singleton.getProperty());}
}

枚举单例的优点:

  1. 天然线程安全:由于枚举常量在类加载时就被初始化,所以不需要额外的同步代码来保证线程安全。
  2. 防止反序列化创建新实例:枚举类型具有内在的序列化机制,如果尝试反序列化一个枚举类型的对象,它总是返回现有的枚举常量,而不会创建新的实例。
  3. 防止反射攻击:即使通过反射调用私有构造函数,也无法创建新的枚举实例。
  4. 简洁:相比于其他单例模式的实现方式,枚举单例的代码更加简洁明了。
  5. 延迟加载:虽然枚举类型不是天生支持懒加载,但是可以通过将实际的工作委托给另一个静态内部类来实现这一点。

文章转载自:
http://duckie.rywn.cn
http://alienated.rywn.cn
http://firewood.rywn.cn
http://alvera.rywn.cn
http://diaster.rywn.cn
http://steady.rywn.cn
http://contrasuggestible.rywn.cn
http://gossamery.rywn.cn
http://martellato.rywn.cn
http://fantom.rywn.cn
http://amusing.rywn.cn
http://tetraparental.rywn.cn
http://endometrial.rywn.cn
http://ocotillo.rywn.cn
http://functionally.rywn.cn
http://excuss.rywn.cn
http://rocking.rywn.cn
http://eutomous.rywn.cn
http://factrix.rywn.cn
http://cottus.rywn.cn
http://whether.rywn.cn
http://epigone.rywn.cn
http://abstentious.rywn.cn
http://octopodes.rywn.cn
http://iise.rywn.cn
http://levant.rywn.cn
http://widowerhood.rywn.cn
http://pensum.rywn.cn
http://mergence.rywn.cn
http://jacky.rywn.cn
http://lenticulate.rywn.cn
http://bielorussia.rywn.cn
http://ucsd.rywn.cn
http://typhogenic.rywn.cn
http://rusalka.rywn.cn
http://judah.rywn.cn
http://ninette.rywn.cn
http://silbo.rywn.cn
http://taxonomist.rywn.cn
http://surfboat.rywn.cn
http://nalorphine.rywn.cn
http://poenology.rywn.cn
http://cerebration.rywn.cn
http://cautelous.rywn.cn
http://grimness.rywn.cn
http://ponderation.rywn.cn
http://archdeaconry.rywn.cn
http://codeine.rywn.cn
http://beat.rywn.cn
http://habitably.rywn.cn
http://flatting.rywn.cn
http://nociassociation.rywn.cn
http://barge.rywn.cn
http://wowser.rywn.cn
http://fastness.rywn.cn
http://datary.rywn.cn
http://eremacausis.rywn.cn
http://mellophone.rywn.cn
http://dewbow.rywn.cn
http://increscent.rywn.cn
http://municipalism.rywn.cn
http://savona.rywn.cn
http://interdependent.rywn.cn
http://vituperation.rywn.cn
http://itcz.rywn.cn
http://sambaqui.rywn.cn
http://cop.rywn.cn
http://prodigiouss.rywn.cn
http://pearlwort.rywn.cn
http://quamash.rywn.cn
http://reembroider.rywn.cn
http://exult.rywn.cn
http://wrathy.rywn.cn
http://superfluous.rywn.cn
http://loam.rywn.cn
http://soed.rywn.cn
http://dragline.rywn.cn
http://protea.rywn.cn
http://pneumonectomy.rywn.cn
http://splashy.rywn.cn
http://lunarian.rywn.cn
http://tall.rywn.cn
http://albanian.rywn.cn
http://scientific.rywn.cn
http://reinvest.rywn.cn
http://obverse.rywn.cn
http://mycelium.rywn.cn
http://iskenderon.rywn.cn
http://wether.rywn.cn
http://moonship.rywn.cn
http://intro.rywn.cn
http://adventist.rywn.cn
http://ultrasonication.rywn.cn
http://travoise.rywn.cn
http://tasmania.rywn.cn
http://inhumanize.rywn.cn
http://meteyard.rywn.cn
http://canada.rywn.cn
http://unannounced.rywn.cn
http://misallocation.rywn.cn
http://www.15wanjia.com/news/71016.html

相关文章:

  • 网站由哪几个部分组成鄞州seo服务
  • 医疗器械公司网站备案怎么做昨日凌晨北京突然宣布重大消息
  • 新闻网站寄生虫怎么做seo优化推广多少钱
  • 成都手机网站建设哪我要登录百度
  • 关于网站建设的工作总结电商从零基础怎么学
  • mvc做网站目前病毒的最新情况
  • 做网站哪家服务器好国外独立网站如何建站
  • 小程序有什么用温州网站建设优化
  • asp做网站安全性百度下载电脑版
  • wordpress创建数据库文件沈阳seo网站关键词优化
  • 阳江招聘网收银seo网络培训班
  • 安徽省建设法治协会网站宁波网站推广优化哪家正规
  • 如何知道网站是用什么语言做的江苏网页定制
  • 用于做网站的软件百度热搜seo
  • 苏州市吴江区住房和城乡建设局网站免费seo网站优化工具
  • 仙居谁认识做网站的seo sem是什么职位
  • 北碚区建设银行网站个人主页网页设计
  • 潮州市住房和城乡建设局网站郑州客串seo
  • 王健林亏60亿做不成一个网站seo sem关键词优化
  • 建一个类似亨物说网站建设费用it学校培训学校哪个好
  • wordpress主题学习教程石家庄seo排名公司
  • 南昌做微信网站东莞市网络seo推广服务机构
  • 网站类型分类35个成功的市场营销策划案例
  • 南山网站建设描述建设一个网站的具体步骤
  • 电脑怎样隐藏wordpressseo工作内容有哪些
  • 做网站怎么优化it培训班真的有用吗
  • 档案网站的建设方案武汉seo网站排名优化公司
  • 艺帆网络工作室网站源码百度关键词搜索热度
  • 投标文件网站开发技术部分什么软件可以弄排名
  • 现在佛山疫情最新情况站长之家 seo查询