多线程环境中的所有静态方法和私有构造模式

时间:2015-10-30 06:37:29

标签: java multithreading

我有一个类似的课程。

class Xyz{

    private static SomeObject abc;

    private Xyz(){
    }

    public static SomeObject method(){
       abc = new SomeObject();
       return abc;
    }
}

我将使用该对象用于不同目的。在多线程环境中这是正确的做法吗?

编辑:

我编辑了我的课程。

class Xyz{

    private static SomeObject abc = new SomeObject();

    private Xyz(){
    }

    public static SomeObject method(boolean newone){
       if(!newone)
        return abc;
       else{
        abc = new SomeObject();
        return abc; 
       }

    }
}

所有用户都应该能够使用方法返回的对象。 我应该让我的方法同步吗?我希望所有用户都使用相同的对象。

1 个答案:

答案 0 :(得分:1)

代码中的静态字段毫无意义。它只能通过method()访问,它会在每次调用时重新创建字段。它可以每次只返回一个新对象,而不存储在静态字段中。

另一方面,如果你真正想要的是一个单身人士,那么一个安全而简单的解决方案是使用enum

enum Xyz {
    INSTANCE;

    private final SomeObject abc = new SomeObject();

    public SomeObject method() {
        return abc;
    }
}

这将确保Xyz的单例属性,但对SomeObject没有任何说明,而与abc的线程安全无关。为了使多个线程可以安全使用,您必须使SomeObject线程安全。