今天Jeff 问我一个关于单例的问题:
wapi2.0 cache class:
AdditionalConfig.java
private IntgServTimeBlockedCache INTG_SERV_ID_CACHE;
public AdditionalConfig() {
/**
* 30 minute cache.
*/
INTG_SERV_ID_CACHE = new IntgServTimeBlockedCache(30 *60);
}
很明显这不是一个单例,就单例来说有2种形式:
1. 饿汉式单例类
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
2. 懒汉式单例类
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。一般来说第一种比较安全。
回过头来看AdditionalConfig.java
需要将
private IntgServTimeBlockedCache INTG_SERV_ID_CACHE;
改为
private static IntgServTimeBlockedCache INTG_SERV_ID_CACHE;
不过在我看来个人喜欢第一种形式的单例:)
分享到:
相关推荐
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
java单例模式的例子java单例模式的例子java单例模式的例子
Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象
Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 PPT详细了单例模式的实现和使用场景
详细讲解了Java单例模式的几种实现方式,并有详细的示例配合讲解.
Java单例模式Java单例模式Java单例模式Java单例模式
源码 博文链接:https://tianlihu.iteye.com/blog/747737
代码中演示了Java设计模式中的单例模式,其中包括饿汉单例模式,懒汉单例模式以及序列化饭序列化单例模式。在实际的开发中,可以直接借鉴使用。
java单例模式开发的7中写法,网上搜索的,可以看看
Java设计模式-单例模式(懒汉和恶汉)
Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...
通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...
java单例模式及实现
java单例模式代码实例
实用Java的单例模式,实用于Java学习者 单例模式 单例模式
java单例模式连接数据库源码.可以直接引用只需加入相应的mysql 或 oracle的驱动,修改源码的连接地址用户名及密码。
java单例设计模式