您的位置:首页 > 编程语言 > Java开发

【CSDN常见问题解答】Java单例模式分析

2012-11-02 13:02 417 查看
今天中午闲着没事,就随便写点关于Java单例模式的。其实单例模式实现有很多方法,这里我将对这些方法进行对比分析:
第一种:
public class Singleton2 {

private Singleton2(){
System.out.println("This is Singleton2's instance.");
};

private static Singleton2 instance = null;

public static Singleton2 getInstance(){
if(instance == null) {
instance = new Singleton2();
}
return instance;
}
}
这种情况未加锁,可能会产生数据错误,比如两个同时新生成的对象,一个把对象数据改变了,而另一个使用的没改变之前的。
第二种:
public class Singleton1 {

private Singleton1(){
System.out.println("This is Singleton1's instance.");
}

private static Singleton1 instance = null;

public static Singleton1 getInstance2() {
if(instance == null){ //1
synchronized (Singleton1.class) { //2
if(instance == null) {
instance = new Singleton1();
}
}
}
return instance;
}

}
这种只会在第一次的时候产生阻塞,之后每实例一次对象,就会在第1步时跳过去,在第一次实例的时候,会在第2步那里产生阻塞,以后就不会了,这种相对来说是最好的。
第三种:
public class Singleton1 {

private Singleton1(){
System.out.println("This is Singleton1's instance.");
}

private static Singleton1 instance = null;

public static synchronized Singleton1 getInstance(){ //1

if(instance == null){
instance = new Singleton1();
}
return instance;
}
}
多线程的时候每次都会在1这里产生阻塞。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息