---------------------------------------------------------------------------------------------------
单例---饿汉式:
Single类一进内存,就已经创建好了对象。
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式,书写简单,而且是线程安全的,建议使用这种方式.
单例---饿汉式:
Single类一进内存,就已经创建好了对象。
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式,书写简单,而且是线程安全的,建议使用这种方式.
单例---懒汉式:
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象.
对象是方法被调用时,才初始化,也叫做对象的延时加载.
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;
}
}
懒汉式,会产生线程安全的问题,可能产生多个实例对象,所以加锁以后,才能安全,代码麻烦,不建议使用.
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象.
对象是方法被调用时,才初始化,也叫做对象的延时加载.
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;
}
}
懒汉式,会产生线程安全的问题,可能产生多个实例对象,所以加锁以后,才能安全,代码麻烦,不建议使用.
懒汉式,将会形成面试的诸多考点:
1.延迟加载
2.线程安全问题,同步代码块和静态同步函数都行.
3.加同步的时候,使用的锁是哪一个?静态函数,肯定不能用this,用的是该类的Class对象.
4.双重判断+同步代码块,提高程序的效率.
5请写一个延迟加载的单例模式.
-----------------------------------------------------------------------------------------------------
1.延迟加载
2.线程安全问题,同步代码块和静态同步函数都行.
3.加同步的时候,使用的锁是哪一个?静态函数,肯定不能用this,用的是该类的Class对象.
4.双重判断+同步代码块,提高程序的效率.
5请写一个延迟加载的单例模式.
-----------------------------------------------------------------------------------------------------