------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
首先,我们以类Single为例,做一个单例设计模式
一个类在内存中只有一个对象,只操作一个对象,所以该类只会提供一个获得对象的方法,
返回值类型为类类型,返回的内容为对象
//同步函数被静态修饰后,用的锁synchronized是this
//静态进内存中,没有本类对象,但是有该类对应的字节码文件对象 类.class
饿汉式
所谓饿汉式,在代码块初始化的时候,就会生成一个对象,
并且向外提供一个公有的方法,直接返回太对象。
由于方法语句只有一句,所以不存在锁的情况
class Single
{
private Singel(){}
private static Singel s=new Singel();
public static Singel getInstance()
{
return s;
}
}
懒汉式
所谓懒汉式,就是在初始化的时候并不给该类对象赋值属性,为null.
只用当调用该方法时,进行判断如果值为null,则新建一个内存对象赋值给该对象,返回该对象
否则则认为该对象以存在,返回原来的对象,确保对象的唯一性。
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
s=new Single();
}
return s;
}
}
懒汉式的加锁情况
由于懒汉式为多行语句,所以在线程运行中可能会造成中断,生成多个对象的情况。
为了提高代码的高效性,所以进行了加锁以及双重判断的情况
第一重判断,为当不存在该对象时,则增加加锁代码块,保证代码块中语句不中断
第二重判断,如果对象值为null,新建这个对象,提高代码的高效性。
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
}