}
public static single getInstance(){
return s;
}
}
上例在对象被使用前先初始化创建,称为饿汉式。下例是对象在被使用时才初始化创建,称为懒汉式,也称为对象的延迟加载。
代码如下:
class single1{
private static single s=null;
private single(){
}
public static single getInstance(){
if(s==null)
return new single();
return s;
}
}
single类加载进内存时,single对象就已经存在于堆内存中,而single1类加载进内存时,single对象要等到被使用时才创建在堆内存中。
采用懒汉式要注意多线程的安全问题,需要对getInstance()方法加同步。
class single1{
private static single s=null;
private single(){
}
public static synchronized single getInstance(){
if(s==null)
return new single();
return s;
}
}
加同步后,程序运行就比较低效,可加双重判断,减少判断锁的次数,但代码编写较为复杂。
class single1{
private static single s=null;
private single(){
}
public static single getInstance(){
if(s==null){
synchronized(single.class){
if(s==null)
return new single();
}
}
return s;
}
}
实际编程时,多采用饿汉式。