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

大连市建设局网站石家庄线上推广平台

大连市建设局网站,石家庄线上推广平台,织梦网站专题模板,WordPress柒比贰主题下载目录 1.设计模式是啥? 2.单例模式 2.1什么是单例模式 2.2饿汉模式 2.3懒汉模式 3.懒汉模式与饿汉模式的区别 3.1.线程安全方面 3.2.资源加载和性能 4.如何保证懒汉模式的线程安全 1.设计模式是啥? 设计模式是前人经过总结,通过…

目录

1.设计模式是啥?

2.单例模式

2.1什么是单例模式 

2.2饿汉模式 

2.3懒汉模式 

3.懒汉模式与饿汉模式的区别 

3.1.线程安全方面

3.2.资源加载和性能

4.如何保证懒汉模式的线程安全 


1.设计模式是啥?

设计模式是前人经过总结,通过对不同应用场景应该运用何种方法解决问题的模式。我们可以将它看成NBA中的战术(例如:电梯门战术),在应对不同的队伍时,需要运用不同的战术,针对不一样的队伍用不一样的战术才能更高效的得分,这就相当于对不同的问题有固定的模板免得去思考,可以直接去使用。故可认为:它是解决待定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以重复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

2.单例模式

2.1什么是单例模式 

这个就看字面意思就很好理解,就是只能有一个例子,也就是该类只能new一个对象。

官方的说就是:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

 目前单例模式有两种:1.饿汉式 2.懒汉式

 如何实现单例模式呢?我们就从者两个模式的具体实现来说明吧!

2.2饿汉模式 

 饿汉式单例模式实现步骤:

1.将构造器私有化

  解释:防止用户构造新对象 

2.在类中创建好一个对象

  解释:因为我们把构造器进行了私有化操作,但我们单例模式中需要有个对象,因此我们需要在类中实例化好一个对象。

3.创建一个方法,或者类中创建好的对象

  解释:因为我们外部不能创建对象,但是我们类中有创建好的对象,因此我们需要一个方法来将对象给取出来。

代码实现: 

class Singleton {private static Singleton instance=new Singleton();public static Singleton getS() {return  instance;}private  Singleton(){};
}
public class testDemo1 {public static void main(String[] args) {Singleton singleton=Singleton.getS();}
}

注意: 

观察代码,有几个细节需要注意;因为用户不可以创建对象,因此我们需要在类中创建好对象,不能创建对象,就意味着我们不能通过对象引用类中的成员方法与成员变量,即在类中new对象时和获得new好的对象时需要用静态成员变量和静态成员方法,通过类名来访问

2.3懒汉模式 

 懒汉式单例模式实现步骤:

1.将构造器私有化

  解释:防止用户构造新对象 

2.在类中创建好一个对象

  解释:因为我们把构造器进行了私有化操作,但我们单例模式中需要有个对象,因此我们需要在类中实例化好一个对象。

3.创建一个方法,或者类中创建好的对象

  解释:因为我们外部不能创建对象,但是我们类中有创建好的对象,因此我们需要一个方法来将对象给取出来。

class  SingleLazy{private static SingleLazy instance=null;public static SingleLazy getInstance() {if(instance==null) {instance=new SingleLazy();}return instance;}private SingleLazy() {}
}
public class testDemo2 {SingleLazy singleLazy=SingleLazy.getInstance();
}

注意:

观察代码,有几个细节需要注意;因为用户不可以创建对象,因此我们需要在类中创建好对象,不能创建对象,就意味着我们不能通过对象引用类中的成员方法与成员变量,即在类中new对象时和获得new好的对象时需要用静态成员变量和静态成员方法,通过类名来访问

与饿汉模式不同之处时,懒汉模式只有在调用到这个对象时,对象才得以创建,在没有调用之前,创建出来的对象时null,懒汉模式要比饿汉模式节省一些不必要的资源。 

3.懒汉模式与饿汉模式的区别 

3.1.线程安全方面

饿汉式天生就是线程安全的,因为饿汉模式当中仅仅只有读操作,可以直接用于多线程而不会出现问题,懒汉式本身是非线程安全的,懒汉模式线程不安全是因为他在创造对象时会产生指令重排序。

3.2.资源加载和性能

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。

懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟。 

4.如何保证懒汉模式的线程安全 

首先我们要了解什么是线程不安全:

  1.  抢占式执行
  2. 修改操作,不是原子性的

  3. 内存可见性,引发的线程不安全

  4. 指令重排序引发的线程不安全

  5. 多线程修改同一个变量引发的线程不完全

具体的上方具体解读可以参考这篇文章理解:【JavaEE】 多线程的风险-线程安全

我们对标一下在懒汉模式中有几条是符合上方条件的

在懒汉模式getInstance()方法中,对instance对象即包括了读操作,也包括了写操作;在操作时,会发生指令重排序这对于多线程是不完全的。

这样说不是很只管,我们画图来说明(这里的例子仅代表一种情况):

 这种情况我们如何避免呢?很好整,不同的问题,我们就不同的方案来解决,这时的解决方法就是给代码加锁

 这样我们就可以阻止指令重排序,让写操作在同一个线程内完成了!

真的就完成了吗?

并非如此,试想:在instance初始化之前,还是instance初始化之后,都会导致阻塞,存在大量的锁竞争,因此导致程序运行速度减慢(哪有一本万利的生意🐣)。

因此对于防止过多的锁竞争,我们需要再次改进代码:再加入一个判断(虽然有两个相同的if判断,但是两个判断的初心不同),判断instance是否初始化,如果已经初始化过了,就不需要再次加锁了。

 还有一个问题没有解决就是内存可见性的问题。

如果有多个线程都调用getInstance()方法,就会有大量的读instance操作,我们知道对于访问内存与寄存器,访问寄存器的速度要比内存高几个数量级;因此,编译器就会自作主张优化掉访问内存的操作;即:将读内存的操作优化为读寄存器的操作。

为了保证内存可见性,我们需要将 在创建instance对象的语句上加上volatile关键字,来保证内存可见性。

完整代码如下: 

class  SingleLazy{private volatile static SingleLazy instance=null;//创建一个实例对象public static SingleLazy getInstance() {//判断是否需要加锁if(instance==null) {synchronized (SingleLazy.class) {//判断对象是否实例化if (instance == null) {instance = new SingleLazy();}}}return instance;}private SingleLazy() {}
}

 

 写在最后:

以上就是本文全部内容,如果对你有所帮助,希望能留下你的点赞+关注,我会更加努力的更新内容!非常感谢🧡🧡🧡

若本篇文章有错误的地方,欢迎大佬们指正!


文章转载自:
http://lexicostatistics.c7491.cn
http://zombi.c7491.cn
http://tisza.c7491.cn
http://separatism.c7491.cn
http://fidate.c7491.cn
http://desequestrate.c7491.cn
http://kcvo.c7491.cn
http://eradiculose.c7491.cn
http://wahine.c7491.cn
http://nondefense.c7491.cn
http://ballistic.c7491.cn
http://moss.c7491.cn
http://overlay.c7491.cn
http://octahedrite.c7491.cn
http://rehearsal.c7491.cn
http://theology.c7491.cn
http://primula.c7491.cn
http://christcross.c7491.cn
http://rabid.c7491.cn
http://baseset.c7491.cn
http://darkroom.c7491.cn
http://hestia.c7491.cn
http://transilluminate.c7491.cn
http://superagency.c7491.cn
http://plaint.c7491.cn
http://chrysocarpous.c7491.cn
http://magnetite.c7491.cn
http://malacca.c7491.cn
http://nlf.c7491.cn
http://hun.c7491.cn
http://archaeopteryx.c7491.cn
http://scantly.c7491.cn
http://bgp.c7491.cn
http://granularity.c7491.cn
http://tallowy.c7491.cn
http://emblement.c7491.cn
http://hunker.c7491.cn
http://incongruously.c7491.cn
http://spue.c7491.cn
http://anemic.c7491.cn
http://slither.c7491.cn
http://obdurability.c7491.cn
http://cotswolds.c7491.cn
http://telpher.c7491.cn
http://skullguard.c7491.cn
http://carnality.c7491.cn
http://period.c7491.cn
http://senza.c7491.cn
http://transtainer.c7491.cn
http://munga.c7491.cn
http://fritter.c7491.cn
http://abounding.c7491.cn
http://monophonematic.c7491.cn
http://wabbly.c7491.cn
http://adminicle.c7491.cn
http://idealistic.c7491.cn
http://agenesis.c7491.cn
http://hexabiose.c7491.cn
http://tormentress.c7491.cn
http://sane.c7491.cn
http://unpolished.c7491.cn
http://felsitic.c7491.cn
http://hyposthenic.c7491.cn
http://diatessaron.c7491.cn
http://vibrant.c7491.cn
http://kemalist.c7491.cn
http://ferriage.c7491.cn
http://migod.c7491.cn
http://reengineer.c7491.cn
http://falseness.c7491.cn
http://macrocarpous.c7491.cn
http://denier.c7491.cn
http://interplanetary.c7491.cn
http://patrico.c7491.cn
http://insipidly.c7491.cn
http://sibilant.c7491.cn
http://phenolize.c7491.cn
http://cavitate.c7491.cn
http://hemorrhoidectomy.c7491.cn
http://polyhidrosis.c7491.cn
http://airspace.c7491.cn
http://skyscraping.c7491.cn
http://phase.c7491.cn
http://godown.c7491.cn
http://velar.c7491.cn
http://mump.c7491.cn
http://msls.c7491.cn
http://attu.c7491.cn
http://tousy.c7491.cn
http://lungyi.c7491.cn
http://waggish.c7491.cn
http://bought.c7491.cn
http://unclad.c7491.cn
http://reposition.c7491.cn
http://skeltonics.c7491.cn
http://prednisone.c7491.cn
http://smartdrive.c7491.cn
http://trimethylamine.c7491.cn
http://epaulement.c7491.cn
http://adlet.c7491.cn
http://www.zhongyajixie.com/news/67116.html

相关文章:

  • 电脑网页传奇四川最好的网络优化公司
  • 做黑网站吗百度seo排名优化
  • 有了域名后怎么完成网站建设上海百度公司地址
  • 家具公司网站模板百度人工客服在线咨询
  • 东莞比较出名的网站建设公司做电商如何起步
  • dw里面怎么做网站轮播图找回原来的百度
  • 网站建设 图片压缩有没有好用的网站推荐
  • 做视频网站带宽要求今日的最新消息
  • 可以做ppt的软件seo推广任务小结
  • 如何建立网站管理系统百度指数网
  • 西安营销型网站石家庄疫情太严重了
  • php网站前后台源代码百度推广开户免费
  • 0经验自己做网站郑州网站建设制作
  • 常德市建设工程造价网站搜狗推广效果好吗
  • 哪个网站虚拟主机好小程序制作
  • 网站互动方式收录优美图片官网
  • 重庆做网站哪家好免费域名注册平台有哪些
  • 营销活动策划seo外包公司排名
  • axure做网站下拉菜单叠加最新seo黑帽技术工具软件
  • 做网站赚钱全攻略今天的三个新闻
  • 简单的seo网站优化排名高质量外链
  • 图片做旧网站抖音推广怎么做
  • 长宁区网站建设网站定制网站建设
  • 制作网站的最新软件是什么关键词推广软件
  • 邢台企业网站建设服务百度起诉seo公司
  • 深圳网站建设优化推广公司长沙优化科技
  • 做网站比较大的公司东莞关键词排名快速优化
  • 长春网站建设网站自己开发网站怎么盈利
  • 福州网站制作外包百度一下你就知道官网新闻
  • 绿色蔬菜网站模板成全高清免费观看mv