解决单例模式的漏洞,仅仅依靠在上次代码实现单例模式是不可行的,依靠上次的设计模式下,其保持可靠性的必要条件是该代码需在单线程的情况下进行执行,若是存在多线程就难以保证对象的唯一性,线程A,线程B,先后执行get方法,进行对象为空的判断,某个线程争抢到锁资源,进行实例化对象,并进行赋值,细节处理,在创建对象是需要在进行一次对象为空的判断,因为该线程执行完实例化对象后,其他线程抢到锁资源,会再次创建一个该类的实例化对象,因此,需要两次条件的判断。
代码如下:
class SinglePattern{
private static SinglePattern pattern;
private SinglePattern(){
}
public static SinglePattern getPattern() {
if(pattern==null) {
synchronized (SinglePattern.class) {
if (pattern==null) {
pattern = new SinglePattern();
}
}
}
return pattern;
}
}