1.什么是单例模式?
即在应用程序中,最多只能有一个实例,且自行实例化向整个应用程序提供该实例。
2.有什么作用?
1.提升运行效率
2.实现数据共享,如application对象
有如下两种单例模式:懒汉式和饿汉式。
懒汉式:
比较懒,只有对象被调用时才去创建。由于添加了同步锁,所以效率较低。
class lazySingleton{
//类加载时进行实例化
private static lazySingleton singleton;
//私有构造方法
private lazySingleton() {
}
public static lazySingleton getInstance() {
//若已实例化,则直接返回
if (singleton == null) {
//多线程下,可能出现if同时成立情况,加同步代码块
synchronized (lazySingleton.class) {
//双重验证
if (singleton == null) {
singleton = new lazySingleton();
}
}
}
return singleton;
}
}
饿汉式:
解决了懒汉式中多线程访问同一个对象出现的效率低问题
class eagerSingleton{
//在类加载时就进行实例化
private static eagerSingleton singleton = new eagerSingleton();
private eagerSingleton() {
}
public static eagerSingleton getInstance() {
return singleton;
}
}