在单例模式中,遇到多线程总要考虑一个性能问题,下面的代码是double-checked locking设计实现单例模式。
先判断,如果创建的对象是null,就改加同步锁,然后再判断。这样避免了多线程下的重复创建对象,也解决了
整体加同步锁倒是性能的缺陷问题.在JDK 5之后,Java使用了新的内存模型。volatile关键字有了明确的语义。
在JDK1.5之前,volatile是个关键字,但是并没有明确的规定其用途——被volatile修饰的写变量不能和
之前的读写代码调整(控制内存),读变量不能和之后的读写代码调整!因此,只要我们简单的把instance加
上volatile关键字就可以了。来源于论坛:http://bbs.csdn.net/topics/391840031
public class SingletonClass {
private volatile static SingletonClass instance = null;
public static SingletonClass getInstance() {
if (instance == null) {
synchronized (SingletonClass.class) {
if (instance == null) {
instance = new SingletonClass();
}
}
}
return instance;
}
private SingletonClass() {
}
}