我有一个类似的课程。
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;
}
}
}
所有用户都应该能够使用方法返回的对象。 我应该让我的方法同步吗?我希望所有用户都使用相同的对象。
答案 0 :(得分:1)
代码中的静态字段毫无意义。它只能通过method()
访问,它会在每次调用时重新创建字段。它可以每次只返回一个新对象,而不存储在静态字段中。
另一方面,如果你真正想要的是一个单身人士,那么一个安全而简单的解决方案是使用enum
:
enum Xyz {
INSTANCE;
private final SomeObject abc = new SomeObject();
public SomeObject method() {
return abc;
}
}
这将确保Xyz的单例属性,但对SomeObject
没有任何说明,而与abc
的线程安全无关。为了使多个线程可以安全使用,您必须使SomeObject线程安全。