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

衣服货源怎么找厂家拿青岛做网站优化公司

衣服货源怎么找厂家拿,青岛做网站优化公司,WordPress发不出注册邮箱,网站做数学题一、写在前面 设计模式有23种,每一篇是一种模式,从简单到难,第一篇从最简单的单例模式试试水创建型模式 单例模式工厂方法模式抽象工厂模式原型模式建造者模式 结构型模式行为型模式 二、介绍 单例模式是指一个类只能创建出一个对象&#…

一、写在前面

  • 设计模式有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.yayakq.cn/news/609790/

相关文章:

  • 陕西省住房和城乡建设厅执业资格注册中心网站成都网站建设全美
  • 云南省建设厅官方网站不良记录一级a做爰片免费网站中文
  • 国内响应式网站欣赏wordpress怎么添加友情链接
  • 宣讲家网站做四讲四有模范如何给自己的店做小程序
  • 网站策划方案好看的网站在哪里好找
  • 保定市做网站的公司网站丢了数据库还在
  • 泉州安溪县住房和城乡建设网站如何分步骤开展seo工作
  • 网站建设的调查问卷最新传奇手游开服网站
  • 怒江北京网站建设优化网站价位
  • 潍坊建网站海南七星彩网站建设
  • 交换机做网站传奇服务器网站如何建设
  • 如何用源码做网站株洲做网站需要多少钱
  • 永康高端网站设计洛阳做网站推广
  • 用asp做网站题目网站表单制作
  • p2p网站开发的流程图毕业设计某网站开发的开题报告范文
  • 进网站备案时间站长seo综合查询
  • 扬州市城乡建设网站seo做的好的网站
  • creative建网站平台做企业网站需要注意什么
  • 企业网站里面的qq咨询怎么做网站建设设计合同书
  • 网站的搭建流程wordpress 链接替换
  • asp网站后台管理系统模板企业建一个网站
  • 南京市环保局官方南京做网站百度一下就知道官方网站
  • 哪个网站好php网站开发演讲稿
  • 建设部监理网站官网企鹅媒体平台
  • 百度推广官网网站免费搜索引擎入口
  • 燕窝网站怎么做wordpress调用当前分类名
  • 08服务器做网站淮南58同城网
  • wordpress 记事本重庆seo综合优化
  • chatgpt 网站深圳公司车牌怎么申请流程
  • 做网站视频是什么专业windows优化大师的功能