您的位置:首页 > 其它

单例模式

2016-04-18 10:22 211 查看
public class Singleton {

/**

* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例

* 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载

*/

private static class SingletonHolder{

/**

* 静态初始化器,由JVM来保证线程安全

*/

private static Singleton instance = new Singleton();

}

/**

* 私有化构造方法

*/

private Singleton(){

}

public static Singleton getInstance(){

return SingletonHolder.instance;

}

}

高人写的

如果用第三种,建议声明为final的,因为我们没有理由不将其声明为final的。另外,关于双重锁定,建议你看看EhCache的源代码里的CacheManager类,new了新的实力后,应该在synchronized块内return,其余一致,包括将实例声明为原子的。

附EhCache项目CacheManager部分源代码:

Java代码


public static CacheManager create() throws CacheException {

if (singleton != null) {

return singleton;

}

synchronized (CacheManager.class) {

if (singleton == null) {

LOG.debug("Creating new CacheManager with default config");

singleton = new CacheManager();

} else {

LOG.debug("Attempting to create an existing singleton. Existing singleton returned.");

}

return singleton; // 这里是在synchronized块内返回的,而你的例子不是

}

}

原文:http://cantellow.iteye.com/blog/838473#comments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: