------- android培训、java培训、期待与您交流! -------
单例模式是指:对于一个类在内存中只能存在唯一一个对象,
饿汉式(先初始化对象,Single类一进内存就创建好了对象)
1,将构造函数私有化
2,在类中创建一个本类对象
3, 提供一个方法可以获取到该对象
class Single
{
private Single(){};
private static final Single s = new Single();
public static Single getInstance()
{
return s;
}
}
懒汉式
class Single
{
private Single(){};
private static Single s = null;// 延迟加载
public static Single getInstance()
{
if(s == null)
{//双重判断提高效率,后来的就不需要再判断锁内的内容,如果不符合条件就直接return
synchronized(Single.class)//同步代码块,该处的锁是这个类的字节码对象
{
if(s ==null)
s = new Single();
}
}
return s;
}
}
二者的区别就是:
饿汉式一进内存就创建了对象。懒汉式提供了延迟加载,可以在需要时再根据对象是否存在再实例化对象;但是在多线程时会出现安全问题,因此开发中多使用饿汉式。
懒汉式的安全问题可以采用加锁的方式来解决,synchronized 同步代码块,可以防止在一个线程判断完之后另一个线程切入的问题。而且此处的锁是Single类的字节码对象。在加上同步锁后,每次代码都要先等锁,然后再判断对象是否存在,会使得效率变低,因此,我们可以在同步锁外面再增加一个判断来提高效率