单例模式

经典单利模式原理

场景:线程池、缓存、硬件设备(多个实例会造成冲突,结果不一致性)

确保一个类最多只有一个实例,并且提供一个全局访问点

经典单例

package singleton;

public class Singleton {
	private static Singleton uniqeSingleton = null;

	private Singleton() { // private 防止外面类调用产生新的对象的可能

	}

	public static Singleton getInstance() {
		if (uniqeSingleton == null) {
			uniqeSingleton = new Singleton();
		}
		return uniqeSingleton;
	}
}
</pre><p>单例模式优化</p><p></p><ul><li>多线程问题  当一个线程执行getInstance方法时,在没有执行到new Singleton时,被切换到另一个线程执行getInstance方法时,此时对象没有创建会出现多个对像</li></ul><div>解决方法:</div><div><ol><li>加同步锁即在getInstance方法加上 <span style="background-color:rgb(204,204,204)">synchronized </span>关键字,缺点同步锁比较耗资源,当该方法被频繁调用时,资源消耗大。</li><li>“急切” 创建实例,在刚开始申明uniqeSingleton时就创建了该对象的实例,即 <span style="background-color:rgb(255,255,255)">private static Singleton uniqueSingleton = </span><span style="background-color:rgb(192,192,192)">new Singleton()</span>,此时getInstance方法中的uniqeSingleton永远不为空,直接返回该对象,缺点是不管实际用没用到该对象都会创建一个实例。</li><li>双重检查加锁发,在uniqeSingleton对象前加 <span style="background-color:rgb(204,204,204)"><strong>volatile</strong></span> 关键词,在getInstance方法时,再加个锁</li></ol><div><pre name="code" class="java">package singleton;

public class Singleton {
	private volatile static Singleton uniqeSingleton = null;

	private Singleton() { // private 防止外面类调用产生新的对象的可能

	}

	public synchronized static Singleton getInstance() {
		if (uniqeSingleton == null) {
			synchronized (Singleton.class) {// 只能有一个对象进入下面创建对象,一个创建后,另一个判断的时候uniqeSingleton就不为空了
				if (uniqeSingleton == null) {
					uniqeSingleton = new Singleton();
				}
			}
		}
		return uniqeSingleton;
	}
}




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kevin007ys/article/details/46800533
文章标签: 单例模式
个人分类: 设计模式学习
想对作者说点什么? 我来说一句

单例模式单例模式单例模式

2011年07月31日 467KB 下载

研磨单例模式研磨单例模式

2010年12月15日 123KB 下载

单例模式(讲解单例模式)

2011年01月18日 317KB 下载

php单例模式和工厂模式

2009年05月22日 54KB 下载

Java单例模式(DOC)

2009年10月21日 91KB 下载

JAVA单例模式

2013年11月14日 46KB 下载

设计模式之单例模式

2017年12月01日 9KB 下载

线程安全的单例模式

2012年12月07日 345KB 下载

单例模式详解~~单例模式详解~~

2011年03月01日 39KB 下载

研磨设计模式之单例模式.pdf

2011年11月16日 311KB 下载

没有更多推荐了,返回首页

不良信息举报

单例模式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭