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

规划设计公司探讨交流宁波网站seo公司

规划设计公司探讨交流,宁波网站seo公司,b2b是什么商业模式,二人对战的微信小程序设计模式—创建型模式之单例模式 介绍 单例模式说明:一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。 单例模式特点: 某个类只能有一个实例;(构造器私有)它必须自行创…

设计模式—创建型模式之单例模式

介绍

单例模式说明:一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。

单例模式特点:

  1. 某个类只能有一个实例;(构造器私有)
  2. 它必须自行创建这个实例;(自己编写实例化逻辑)
  3. 它必须自行向整个系统提供这个实例;(对外提供实例化方法)

单例模式图示如下:

单例模式图

饿汉式

饿汉式,比较简单,代码如下:

public class SingletonObject {private final static SingletonObject obj = new SingletonObject();private SingletonObject() {System.out.println("创建了单例对象");}public static SingletonObject getInstance() {return obj;}
}

懒汉式—效率低下实现方式1(线程安全)

获取实例的方法是static的,我们可以给整个方法加一个锁,这样锁的对象是整个类,可以保证线程安全:

代码实现如下:

public class SingletonObject {//懒汉式private static SingletonObject obj;//保证构造器私有,外部不能实例化private SingletonObject() {System.out.println("创建了单例对象");}//这种锁粒度太大,导致效率低public static synchronized SingletonObject getInstance() {//懒汉式,如果没有再去创建if(obj == null) {obj = new SingletonObject();}return obj;}
}

懒汉式—效率低下实现方式2(线程安全)

我们可以不给整个方法加锁,可以给如下代码块加锁,但是这样的方式效率还是低;

public class SingletonObject {//懒汉式private static SingletonObject obj;//保证构造器私有,外部不能实例化private SingletonObject() {System.out.println("创建了单例对象");}//但是这样锁粒度还是太大,进入到方法里边再加锁,这样效率还低public static SingletonObject getInstance() {synchronized(SingletonObject.class) {//懒汉式,如果没有再去创建if(obj == null) {obj = new SingletonObject();}}return obj;}
}

懒汉式—线程不安全

我们能否在创建时再加锁呢,于是有了如下的代码:

public class SingletonObject {//懒汉式private static SingletonObject obj;//保证构造器私有,外部不能实例化private SingletonObject() {System.out.println("创建了单例对象");}//线程不安全public static SingletonObject getInstance() {//懒汉式,如果没有再去创建if(obj == null) {synchronized(SingletonObject.class) {obj = new SingletonObject();}}return obj;}
}

这样的方式是线程不安全的,比如:

  1. 有两个线程,线程1和线程2都进入到方法中,判断到obj为null;
  2. 假如线程1先获取到锁,为obj赋值完成,然后方法运行结束,返回obj;
  3. 然后线程2获取到锁,又把obj赋值一次;此时两次返回的就不是同一个对象了。

懒汉式—双重检查锁

下面的懒汉式设计模式,用了双重检查锁;

public class SingletonObject {//懒汉式,线程可见性private volatile static SingletonObject obj;//首先保证构造器私有,外部不能实例化private SingletonObject() {System.out.println("创建了单例对象");}/*** 双重检查锁 + 内存可见性volatile*/public static SingletonObject getInstance() {//懒汉式,如果没有再去创建if (obj == null) {synchronized (SingletonObject.class) {if(obj == null){obj = new SingletonObject();}}}return obj;}
}

方法getInstance()中,如果单例对象为空,才会把方法块加锁,获取到锁的线程创建对象完成并赋值成功,且obj保证了线程可见性,其他线程便可以感知到obj不为null,就不会再创建赋值了。

http://www.ds6.com.cn/news/116232.html

相关文章:

  • 网站的验证码是怎么做的福州百度seo排名
  • 做深度报道的网站营销软文是什么意思
  • 卡片式网站模板下载互联网怎么打广告推广
  • 做网站站长开通vip免费网站推广群发软件
  • 网站开发公司杭州网站建设网站平台有哪些
  • 社区网站优化三个关键词介绍自己
  • qq邮箱怎么做网站电脑培训学校
  • 企业展厅设计要点长春seo关键词排名
  • wordpress商城积分插件seo优化报价公司
  • 网站续费 多久福建百度代理公司
  • 东莞疫情最新消息实时更新数据跟我学seo
  • 男男互做网站上海网上推广
  • 网站正能量怎样才能上百度
  • 南通住房和城乡建设厅网站首页google推广教程
  • 网站设计 卡片式设计搜索引擎营销的主要方式有哪些?
  • 设计兼职网站百度推广课程
  • 长业建设集团有限公司网站市场推广外包团队
  • 网站制作公司 沈阳企业如何进行网络营销
  • 网站开发毕业设计收获与体会营销企业
  • 大兴智能网站建设哪家好国外推广网站
  • 正能量不良网站推荐2020网站优化设计的基础是网站基本要素及每个细节的优化
  • 婚纱外贸soho建哪种网站好推广普通话ppt课件
  • 当当网网站开发计划和预算郑州官网网站优化公司
  • 哪里有网站建设定制怎么在百度发布信息
  • wordpress 全站 下载关键字c语言
  • 怎们自己做网站五种常用的网站推广方法
  • wordpress双语建站互联网推广方式有哪些
  • 网站模板编辑软件广州seo怎么做
  • 品牌网站建设绿d茶seo技术团队
  • wordpress安装指令南宁网站优化公司电话