1. 单例模式
单例模式相信大家都不陌生,这里提供一个使用枚举类实现单例模式的例子。
1.1 饿汉式的单例模式
public class YYSingletonDemo {
private YYSingleton() {
}
private enum YYSingleton {
INSTANCE;
}
public static YYSingleton getInstance() {
return YYSingleton.INSTANCE;
}
}
1.2 懒汉式单例模式
public class YYSingleton {
private YYSingleton() {
}
private enum YYSingletonHolder {
INSTANCE;
private YYSingleton instance = null;
private YYSingleton getYYSingleton() {
instance = new YYSingleton();
return instance;
}
}
public static YYSingleton getInstance() {
return YYSingletonHolder.INSTANCE.instance;
}
}
2.为什么使用枚举类是线程安全的单例模式?
由于枚举类的特殊性,保证了枚举类型的唯一性。由于枚举类会在编译时期进行加载,因此属于是饿汉式的单例模式。但是如果把它当作一个成员变量,只有在使用时才会加载,属于懒汉式单例模式。
3. 双重检查锁实现单例模式
public class MySingleton {
public static volatile MySingleton MYSINGLETON;
private MySingleton() {
}
public static MySingleton getMYSINGLETON() {
if (MYSINGLETON == null) {
synchronized (MySingleton.class) {
if (MYSINGLETON == null) {
MYSINGLETON = new MySingleton();
}
}
}
return MYSINGLETON;
}
}