单例模式(Singleton)

本文深入探讨了Java中单例模式的概念、形式及其应用,包括实例化方式、多线程安全实现、懒加载机制和注意事项。重点阐述了单例模式在资源管理、状态维护和简化接口等方面的优势,同时指出了其在特定场景下的局限性及替代方案。

       单例模式定义:Singleton模式主要作用是保证在Java 应用程序中,一个类Class只有一个实例存在。
       在很多操作中都需要单例模式,比如创建目录,数据库连接都需要这样的单线超程操作。
       还有, singleton 能够被状态化;  这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize 的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。
       另外方面,Singleton也能够被无状态化。提供工具性质的功能,Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java 垃圾回收(garbage collection)。
       单例模式的形式如下:
       1.Singleton.java

package singleton;

public class Singleton {
	
	private Singleton (){}
	
	private static Singleton instance = new Singleton();
	
	public static Singleton  getInstance (){
		
		return instance;
	}

}
    2.SingletonTwo.java
public class SingletonTwo {
	
	private SingletonTwo(){}
	
	private static SingletonTwo instance = null;
	
	public static synchronized SingletonTwo getinstance(){
		
		if(instance==null){
			instance = new SingletonTwo();
		}
		return instance;
		
	}

}

        上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。注意到lazy initialization 形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization 的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。 一般认为第一种形式要更加安全些。 
        Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java 的类  线程  内存等概念有相当的了解。 
        总之:如果你的应用基于容器,那么Singleton模式少用或者不用,可以使用相关替代技术。 





转载于:https://my.oschina.net/gao0516/blog/95148

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值