延时加载的单例设计模式?可用饿汉式和懒汉式去分析。如下
问题:饿汉式与懒汉式的不同?
懒汉式用于实例的延迟加载,如果多线程访问时会出现安全问题。
解决:可以加同步代码块解决,但是低效,用双重判断形式提高效率问题。
加同步时,使用的锁是哪一个?
答:该类所属的字节码对象,如synchronized(Single.class)
/*
class Single
{
private static final Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
//懒汉式
在多线程访问时会出现安全隐患,所以用synchronized(){},但是每次访问都要判断锁。
低效,解决方法,双重判断,减少判断次数,提高 懒汉式的效率。
因为很麻烦,所以一般选择饿汉式。
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)//注意锁的对象
{
if(s==null)
//--->A;
s = new Single();
}
}
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
|
|