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

语言网站建设线上培训机构

语言网站建设,线上培训机构,政府网站建设网页设计规范,软件代做网站在哪找活一.什么是单例模式? 在 Java 里,单例模式指的是一个类仅有一个实例,并且提供一个全局访问点(公有get方法)来获取该实例。在多线程环境下实现单例模式时,需要保证线程安全,避免多个线程同时创建多…

一.什么是单例模式?

在 Java 里,单例模式指的是一个类仅有一个实例,并且提供一个全局访问点(公有get方法)来获取该实例。在多线程环境下实现单例模式时,需要保证线程安全,避免多个线程同时创建多个实例。下面介绍几种常见的多线程单例模式实现方式

 二.饿汉式

在类加载时就创建了实例 

1.代码示例

class Singleton {//在类加载时直接创建实例//static 修饰引用变量,意味着这个变量属于类,而不是实例//确保类只有一个实例。这里用 static 让 instance 属于类,只有一份。private static Singleton instance = new Singleton();//提供公有的get方法来让外部获取唯一实例public static Singleton getInstance() {return instance;}// 把构造方法设为 private。此时在类的外面,就无法继续 new 实例了.private Singleton() {}
}class Demo20 {public static void main(String[] args) {// 如果代码这么写,就违背初衷,就应该禁止这个类在类外部被 new.// Singleton instance2 = new Singleton();Singleton instance = Singleton.getInstance();}
}

2.以上代码是线程安全的——为什么?

public static Singleton getInstance() {return instance;}

因为上述代码中这段操作只涉及到“读取数据”,不涉及到修改

 三.懒汉式

不是在类加载时就创建了实例 

先来看一段代码

1.代码示例

class SingletonLazy {private static SingletonLazy instance = null;public static SingletonLazy getInstance() {if (instance == null) {instance = new SingletonLazy();}return instance;}// 把构造方法设为 private。此时在类外部,就无法继续 new 实例了.private SingletonLazy() {}
}class Demo2 {public static void main(String[] args) {SingletonLazy instance = SingletonLazy.getInstance();SingletonLazy instance2 = SingletonLazy.getInstance();}
}

 2.解释

 这种方式在首次调用getInstance( )的时候才会创建实例,后续再调用getInstance( ),则直接返回实例(不new)。

3.但在多线程环境下不安全--为什么?

 if (instance == null) {instance = new SingletonLazy();}return instance;

在上述代码中这段操作既涉及到了读取,也涉及到了修改(将SingletonLazy对象赋值给引用变量instance)

假设有两个线程 t1,t2 进行下方操作

SingletonLazy instance = SingletonLazy.getInstance();

导致实例被创建出多份

4.如何修改?

加锁

4.1 synchronized修饰此段代码块

class SingletonLazy {private static SingletonLazy instance = null;public static SingletonLazy getInstance() {//这里synchronized (Singleton.class){if(instance == null) {instance = new SingletonLazy();}}return instance;}private SingletonLazy() {}
}

4.2 synchronized修饰getInstance( )方法

class SingletonLazy {private static SingletonLazy instance = null;//这里public static synchronized SingletonLazy getInstance() {if(instance == null) {instance = new SingletonLazy();}return instance;}private SingletonLazy() {}
}

 5.有个小的新问题

线程不安全并不是一直都不安全。只是在多线程(多个线程)环境下,首轮调用getInstance(  )方法才会不安全。一旦实例创建好,多个线程同时调用getInstance( )方法也并不会触发线程不安全问题。

总:会带来一定的性能开销

6.如何解决?

怎样既保持线程安全,也减少同步带来的性能开销

6.1 解决方法

双重检查锁定


public static SingletonLazy getInstance() {//加上判定条件if (instance==null){//在此处加锁synchronized (Singleton.class){if(instance == null) {instance = new SingletonLazy();}}}return instance;
}

6.2 新问题 (这里可以不看)

 

6.2.1 解决方法(这里看)

 使用 volatile 关键字保证可见性

 private static volatile SingletonLazy instance = null;

 

http://www.cadmedia.cn/news/1726.html

相关文章:

  • 网站建设需要什么硬件和软件搜索引擎优化是指什么意思
  • 公司主页怎么写专业seo推广
  • 岑溪网站建设营销咨询公司排名前十
  • web动态网站开发的书籍重庆关键词快速排名
  • 苏州全网网站建设企业网站建设规划
  • 网站建设哪里比较好semir是什么意思
  • 吉安高端网站建设公司建站平台哪个好
  • 网页特效精灵seo免费培训视频
  • 自己在线制作logo免费设计软件seo是什么学校
  • 山东省建设厅举报网站软文推广服务
  • 学生做网站的软件他达拉非的副作用和危害
  • 小型网站设计及建设毕业论文外贸网络营销
  • 南昌房地产网站建设搜索引擎优化是做什么的
  • 网站建设 福步 2018seo搜索引擎优化价格
  • 嘉里建设网站天津做网站的公司
  • 保定建站模板运营推广计划
  • 产业协会建设网站方案sku电商是什么意思
  • 阿旗建设局举报网站韩国网站
  • 网站搭建好有什么内容可以修改百度seo点击
  • wordpress入门视频教程seo排名谁教的好
  • 郑州模板建站系统百度网讯科技有限公司官网
  • 动漫制作专业调研目的seo关键词优化指南
  • 网站建设流程及费用怎么让网站排名上去
  • 网站建设保障方案域名批量查询系统
  • 甘肃路桥建设集团公司网站培训机构管理系统
  • 网站开发使用哪种工具好中囯联通腾迅
  • 网站建设案例精英网络营销推广策划的步骤是什么
  • 望城区政府门户网站城市建设网站服务费一年多少钱
  • 物流网站建设评析品牌营销
  • 深圳网站设计兴田德润优惠吗成都专业的整站优化