时间:2021-05-20
1.什么是单例模式
2.经典单例模式实现
public class MyInstance{ //第一步:私有化构造器,只有类自身才能调用构造器外部类不能够直接new出这个类的实例对象 private MyInstance(){} //第二步:声明一个全局静态变量来记录自身实例的对象,也是私有的,限制其它外部类访问 private static MyInstance myInstance; //第三步:提供一个外部可访问的静态公开方法,来获得该类的唯一实例 public static MyInstance getMyInstance(){ //第四步:进行判断自身类对象如果为空,则创建一个实例 if(myInstance==null){ //这里的方法只执行了一次,生成了一个唯一的类对象 myInstance=new MyInstance(); } //第五步:如果不为空,则返回该类对象,故由始至终,该类对象只初始化过一次,只有一个对象存在,这就是单例模式 return myInstance; }}3.经典模式存在的缺陷
这种经典模式也称之为懒汉式单例模式(lazy instantiaze),因为它是延迟化实例化的,即如果我们不需要这个实例,则它永远不会被初始化,只有在调用过一次实例化方法后,才会被创建出对象。
在多线程的情况下可能会产生并发问题,因为获取单例的方法getMyInstance()有可能被多个线程同时访问,这时就会有可能 创建出两个以上的实例对象。这就要考虑要线程安全的问题了,解决问题就是在获取实例方法处加一个同步锁,这样就能轻松地解决线程并发的问题了。
public static synchronized MyInstance getMyInstance(){ //加同步锁关键字synchronized,这样在有线程访问这个方法时,其它线程只能等待当前线程访问结束才能访问这个方法。 if(myInstance==null){ //这里的方法只执行了一次,生成了一个唯一的类对象 myInstance=new MyInstance(); }4.多线程下同步所造成的性能问题
如果将获取实例的方法进行同步的话,会造成程序执行的效率大大地下降,而且单例对象生成只要调用一次方法即可,之后每次调用这个方法时,同步都是一种累缀,有可能会拖垮程序的性能。
当然如果你的程序对于性能的要求并不是很高的话,用同步的方法获取单例是最简单而有效的。
为保证程序的性能并且又不会出现并发的问题,可以使用另一种生成单例对象的模式,叫做饿汉式单例模式(eagerly instantiaze)
public class MyInstance{ //第一步:私有化构造器 private MyInstance(){} //第二步:声明一个全局静态变量来记录自身实例的对象,并进行实例化 private static MyInstance myInstance=new MyInstance(); //第三步:提供一个外部可访问的静态公开方法,来获得该类的唯一实例 public static MyInstance getMyInstance(){ return myInstance; }这个模式使JVM在加载这个类时会马上创建唯一的单例对象,这样就能保证任何线程访问静态单例变量myInstance时,单例对象一定被实例化过了。
5.利用双重检查加锁来提升性能
单例模式的所有情况都已经总结完毕,一开始以为单例模式应该是所有设计模式中最简单易懂的了,没想到看到四人帮的HeadFirst设计模式后发现还有这么多门道,真的是学无止境。
注:以上所有内容皆总结自《HeadFirst 设计模式》
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java单例模式的实例详解概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点:
java中设计模式(多例)的实例详解多例:单例设计模式的变形,可以看成是一个缓存池的单例,而缓存池里面可以存多个数据实例代码://单例+缓存---没有控制池大小
单例模式概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能有一个实例。2、
java单例模式单例模式是一种常用的软件设计模式。在它的可信结构中只包含一个被实例化单例的特殊类。通过单例设计模式可以把整系统中的一个类只有一个实例。单例设计模
本文实例为大家分享了java单例模式实现面板切换的具体代码,供大家参考,具体内容如下1、首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那