您的位置:首页 > 其它

单例模式中懒汉式和饿汉式 实现和总结

2010-11-03 16:00 99 查看
先看懒汉式单例模式

public class Singleton {
private static Singleton instance = null;
private Singleton(){
System.out.println(1);
}
synchronized public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}


再看饿汉式单例模式

public class Singleton2 {
private static final Singleton2 instance = new Singleton2();
private Singleton2(){
System.out.println(2);
}
public static Singleton2 getInstance(){
return instance;
}
}


测试

public class SingletonTest {
public static void main(String[] args){
//测试懒汉式
Singleton s11 = Singleton.getInstance();
Singleton s12 = Singleton.getInstance();
if(s11 == s12){
System.out.println("same singleton");
}else{
System.out.println("not same singleton");
}

//测试饿汉式
Singleton2 s21 = Singleton2.getInstance();
Singleton2 s22 = Singleton2.getInstance();
if(s21 == s22){
System.out.println("same singleton2");
}else{
System.out.println("not same singleton2");
}

}
}


输出结果

1
same singleton
2
same singleton2


分析,总结:

1,两种形式instance和构造方法都用private;

2,instance和getInstance()都用static;

3,饿汉式instance用final;

4,懒汉式getInstance()用synchronized才能保证线程安全;

5,饿汉式的instance定义时就初始化instance = new Singleton(),线程是安全的,且不论后期是否用到都初始化了,所以牺牲了资源利用率,一旦用到又将提高速度;

6,懒汉式的instance是在使用时才初始化的,所以提高了资源利用率,但是用到时会浪费速度;

7,尽量用饿汉式单例模式,简单、好用、安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: