Java多线程 - 识别代码中的错误

时间:2013-04-07 14:41:01

标签: java multithreading

所以这段代码是在考试中给出的,问题是它有什么问题。它的目的是创建SomeClass类型的新对象,但前提是它们不是先创建的。

class Foo {
    private SomeClass x = null;
    public synchronized SomeClass getX() {
        if (x == null)
            x = new SomeClass();
        return x;
    }
}

我的猜测是xgetX应该声明为静态,否则可能会有x的多个副本。那是对的吗?如果这是代码中唯一的问题?

1 个答案:

答案 0 :(得分:1)

您正在尝试构建单件工厂方法:

public class Foo {
    private static SomeClass x = null;
    public static synchronized SomeClass getSomeClass() {
        if (x == null)
            x = new SomeClass();
        return x;
    }
}

请注意,如果你真的需要这个,你也应该让SomeClass成为Foo的内部类,并使SomeClass的构造函数成为私有。