单例模式的理解

单例模式可能是代码比较少的一种模式了,但是能把单例模式说清、用好、考虑全面还真不是一件容易的事。本文就对java中单例模式做了一个总结,如有错漏之处,恳请读者指定:
在java编程过程中,单例模式主要分为饿汉式和懒汉式两种
饿汉式:
饿汉式,就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下:

public class Singleton{
	private static Singleton=new Singleton();
	private Singleton(){}
	public static getSingleton(){
		return singleton;
	}
}

这样做的好处是编写简单,但是无法做到延迟创建对象。但是我们很多时候都希望对象可以尽可能的延迟加载,减小负载,所有就需要下面的懒汉法:
懒汉法

public class Singleton{
	private static Singleton singleton=null;
	private Singleton(){}
	public static Singleton getSingleton(){
		if(singleton==null)
		      singleton=new Singleton();
		      return singleton;
	}
}

这种写法是最简单的,由私有构造器和一个公有静态工厂方法构成,在工厂方法中对singleton进行null判断,如果是null就new一个出来,最后返回singleton对象。这种方法可以实现延时加载,但是有一个致命弱点:线程不安全。如果有两条线程同时调用getSingleton()方法,就有很大可能导致重复创建对象。

考虑线程安全的写法

public class Singleton{
	private static Singleton singleton=null;
	private Singleton(){}
	public static Singleton getSingleton(){
			synchronized(Singleton.class){
		if(singleton==null){
			singleton=new Singleton();
		}
    }
            return singleton;
  }
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值