保证一个类只有一个实例,并提供一个访问它的全局访问点。
懒汉式和饿汉式
懒汉式
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。
这里的单例模式并不适用于集群环境。
懒汉模式体现了延迟加载和缓存的思想。
懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。
不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
饿汉式是线程安全的。
更好的单例实现方式
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
单例模式的本质是控制实例数目。
单例模式Singleton某个类只需要一个类实例
猜你喜欢
转载自katy1206.iteye.com/blog/2026216
今日推荐
周排行