1.经典单例模式原理
单例模式意义
有些对象是需要一个:如打印机、缓存、线程池
如果多个实例会造成冲突,结果不一致等问题
可以通过静态变量和全局变量解决问题
单例模式:确保一个类只有一个实例,并提供一个全局访问点
单例模式设计思路
private constructor(){}构建函数私有,在外部没办法调用,封闭了在外边构造类的方式;
static instance在类内部用静态方法的方式,new实现自己,static类方法,全局访问
2.经典单例模式代码示例
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
singleton= new Singleton();
}
return singleton;
}
}
3.经典单例模式的优化
多线程问题
同步锁synchronized getInstance(),会很慢
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static synchronized Singleton getInstance()
{
if (singleton== null)
{
singleton= new Singleton();
}
return singleton;
}
}
“急切”创建实例 ,程序中可能就不会用到,就创建了
public class Singleton
{
private static final Singleton singleton = new Singleton();
//volatile关键字解析https://www.cnblogs.com/dolphin0520/p/3920373.html
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
双重检查加锁法
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}