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

安徽伟诚建设工程有限公司网站广州模板网站建设

安徽伟诚建设工程有限公司网站,广州模板网站建设,dede 购物网站,建站之星网站 和服务器单例模式是设计模式的一种,先谈谈什么是设计模式? 大家应该都知道棋谱、剑谱之类的,就是一些“高手”在经历过长期的累计之后,更具经验写出的具有固定套路的处理“方法”,只要按照这个套路来,在对局之中必然…

单例模式是设计模式的一种,先谈谈什么是设计模式?

大家应该都知道棋谱、剑谱之类的,就是一些“高手”在经历过长期的累计之后,更具经验写出的具有固定套路的处理“方法”,只要按照这个套路来,在对局之中必然是不会吃亏的,甚至能够一招制敌。

那么在我们日常的开发中也有大佬们针对一些十分常见的场景,抽象出固定的套路。一些小白在学习了大佬总结的设计模式之后,就像是掌握了套路,针对适用的场景就不会吃亏。

单例模式的使用场景是什么呢?单例模式能够保证某个类的在程序中只存在唯一的一份,就算是new多个实例,实际上也是同一份。

这一点在很多场景上都需要. 比如 JDBC 中的 DataSource 实例就只需要一个.

单例模式的具体实现方式可以分为 饿汉模式 和 懒汉模式:

饿汉模式:

类加载的同时创建实例。

class Singleton{//static 修饰 是类属性 直接在类加载的时候将实例创建出来,饿汉模式private static Singleton instance = new Singleton();//为了避免Singleton类不小心被复制出多份//将构造方法设置为private。这样在类外面就没有办法通过new的方式来创建 Singleton这个实例了private Singleton() {}public static Singleton getInstance(){return instance;}
}

懒汉模式-单线程版本

类加载的时候不创建实例. 第一次使用的时候才创建实例.

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

懒汉模式-多线程版本

为什么这里的懒汉模式需要考虑多线程版本呢?因为上面的单线程的代码存在线程安全的问题。不安全是因为在getInstance当中有对instance的写操作,涉及到写操作的时候就要小心了。如果在第一次创建实例的时候有多个线程同时调用了getInstance方法就会导致创建出多个不同的实例了,与我们的单例模式初衷所悖。因此需要对这里的写操作加锁:

class Singleton {private static Singleton instance = null;private Singleton() {}public synchronized static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

懒汉模式-多线程改进版本

上面的代码还存在着两个不足

  1. 加锁是一个开销比较高的操作,我们也看到了之所以线程不安全是因为在第一次创建实例的时候有可能有多个线程同时施行,导致了创建出多个不同的实例。那么我们只需要针对首次创建实例的时候加锁,后续的操作就没有必要加锁了。这样可以提升很大的效率。
  2. 同时为了避免“内存可见性”导致读取的instance存在偏差,于是补充上volatile
class SingletonThread {private static volatile SingletonThread instance = null;private SingletonThread() {}public static SingletonThread getInstance() {if (instance == null) {synchronized (SingletonThread.class) {if (instance == null) {instance = new SingletonThread();}}}return instance;}
}

注意理解两个if判定。

虽然两个if的判定条件是一样的但是两者的含义却大大不同。第一个if判定是判定instance是否是第一次创建,如果没有创建的话就开始创建实例并且加锁。第二个if判定抢夺到锁后,instance是否已经被创建了。两个if语句不可以省略任意一个。

http://www.yayakq.cn/news/545408/

相关文章:

  • 哪些公司做网站比较好网监要求网站备案
  • 崇信县门户网站做电影网站什么系统好
  • 建设一个招聘网站大概多少费用app设计网站推荐
  • 杭州百度首页优化网站内容优化的准则
  • 百合怎么做网站网站访问量怎么做
  • 网站建设v5star网站怎样制作吸引人
  • 外国人的做视频网站设计班级网站建设
  • 西安网站群公司长沙值得去的互联网公司
  • 兰州市建设局网站国贸大厦wordpress怎样静态化
  • 顺的网站建设教程logo设计公司怎么去跟客户谈
  • 深圳模板网站建设案例厦门网站建设哪家便宜
  • 网站搭建为什么要备案房产中介网站怎么做
  • 成都市住房与城乡建设厅网站app开发公司价格表
  • 电商平台官方网站企业外包
  • 怎样用word做网站正规网站优化公司
  • 外贸企业有哪些公司怎么给一个网站做seo
  • 可以做外贸的网站html5网站后台
  • 公司 做网站青浦徐泾网站建设
  • 校园网站cms商品seo关键词优化
  • asp.net 网站开发项目化教程做封面怎么把网站加上去
  • 网站建设中中文模板下载wordpress自定义侧边栏小工具
  • 可信网站身份验证 必须做吗重庆高端设计公司
  • 门户网站开发要多久安卓app上架费用
  • 在百度上做网站有用吗网站突然没有收录
  • 企业网页制作哪家公司好手机网站seo软件
  • php响应式网站开发教程免费禁用黄app软件排行
  • 给公司做个网站多少钱电商网站开发的流程图
  • 韶关市网站建设招标网站建设数据库ER图怎么画
  • 手机静态网站开发制作中小型网站建设资讯
  • 企业网站建设需要哪些设备wordpress 表格 插件