单例

第一种形式:懒汉式,也是常用的形式。

publicclassSingletonClass{

privatestaticSingletonClass instance=null;

publicstaticsynchronizedSingletonClass getInstance(){

if(instance==null){

instance=newSingletonClass();

}

returninstance;

}

privateSingletonClass(){

}

}



第二种形式:饿汉式

//对第一行static的一些解释

// java允许我们在一个类里面定义静态类。比如内部类(nested class)。

//把nested class封闭起来的类叫外部类。

//在java中,我们不能用static修饰顶级类(top level class)。

//只有内部类可以为static。

publicclassSingleton{

//在自己内部定义自己的一个实例,只供内部调用

privatestaticfinal Singleton instance =newSingleton();

privateSingleton(){

//do something

}

//这里提供了一个供外部访问本class的静态方法,可以直接访问

publicstaticSingleton getInstance(){

returninstance;

}

}


第三种形式: 双重锁的形式


publicclassSingleton{

privatestaticvolatileSingleton instance=null;

privateSingleton(){

//do something

}

publicstaticSingleton getInstance(){

if(instance==null){

synchronized(SingletonClass.class){

if(instance==null){

instance=newSingleton();

}

}

}

returninstance;

}

}

//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。

//这种模式中双重判断加同步的方式,比第一个例子中的效率大大提升,因为如果单层if判断,在服务器允许的情况下,

//假设有一百个线程,耗费的时间为100*(同步判断时间+if判断时间),而如果双重if判断,100的线程可以同时if判断,理论消耗的时间只有一个if判断的时间。

//所以如果面对高并发的情况,而且采用的是懒汉模式,最好的选择就是双重判断加同步的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,623评论 1 8
  • 1 场景问题# 1.1 读取配置文件的内容## 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相...
    七寸知架构阅读 6,967评论 12 68
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,532评论 4 34
  • 摘要:设计模式之一:单例模式目录介绍1.单例模式介绍2.单例模式定义3.单例模式使用场景4.单例模式的实现方式 4...
    肆虐的悲傷阅读 543评论 0 2
  • 6月7日晚上的百人计划第一课,算是揭开了我跟着计划学习的序幕。这第一课,讲了重要的起始内容:学习方法和整个百...
    零_bbc8阅读 423评论 1 0

友情链接更多精彩内容