`
xfxlch
  • 浏览: 162618 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 单例模式

    博客分类:
  • Java
阅读更多
所谓的饱汉模式就是指:我们在其他线程想来获取实例化对象的时候,我们早就把这个对象的实例保存在内存中了。
代码如下:
	private SingleThread(){}
	private static SingleThread instance = new SingleThread();//饱汉模式
	public static SingleThread getInstance(){
		return instance;
	}


所谓的饿汉模式就是指:只有刚开始的时候,我们并没有把对象实例化到内存中,而是要等到其他线程来调用的时候才实例化对象,并且以后就一直在内存中维持一份就OK了。
代码如下:
private SingleThread(){}
	private static SingleThread instance = null;//饿汉模式
	public static synchronized SingleThread getInstance(){
		if(instance==null){
			instance = new SingleThread();
		}
		return instance;
	}


所谓的双重校验模式:鉴于饿汉模式中,每次的线程调用都要使用synchronized来做一次线程同步,这个开销对于我们的一些大型的分布式应用来说,是不希望出现这种情况的。比如淘宝这样大型的电子商务网站,恨不得消费者对应用的每次操作都立马得到响应,哪怕是提供几毫秒,对淘宝收入都是很大的响应。所以事实上饿汉模式中,我们只需要在第一次调用的时候来加锁,其他时候,我们就可以直接来判断实例是否为空就可以了:
代码如下:
private SingleThread(){}
	private static SingleThread instance = null;//双重校验模式
	public static  SingleThread getInstance(){
		if(instance==null) {
			synchronized (SingleThread.class) {
				if(instance==null){
					instance = new SingleThread();
				}
			}
		}
		return instance;
	}


如何选择的话,看具体的应用,但总的来说双重校验模式比较受欢迎。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics