2

我有以下两个课程:

public class MyClass {

   public static void faceTheWorld(String Input){
      SafeClass sC = new SafeClass();
      sC.workWithInput(Input);
   }
}

public class SafeClass {
   public void workWithInput{String allInp)

   work with allInp...
}

我的问题是。如果我同时多次调用 MyClass.FaceTheWorld(),它是否总是会创建一个新的 SafeClass 类实例,还是会一直尝试创建同一个名为“sC”的实例?

我是否需要创建一个实例数组来避免同时创建同一个实例?这在 Java 中看起来如何?

最终,我想要实现的是,当我使用“输入”调用 FaceTheWorld 时,它始终确保“输入”是线程安全的,例如没有其他实例可以修改/访问它。

我使 SafeClass 同步,这会解决问题吗?

非常感谢

4

3 回答 3

1

只要您不访问可以被其他线程(类的成员或静态变量)更改的变量,如果您只是在静态方法(或任何其他方法)中创建一个新实例,您将永远不会有任何竞争条件,因为每个方法都有自己的变量堆栈。

具体到你的问题:

它总是会创建一个新实例。

于 2013-03-10T16:48:35.620 回答
1

它每次都会创建一个新实例,因此它应该是线程安全的,除非您没有告诉我们任何其他奇怪的事情(例如在您调用的方法中使用静态变量的对象)。但是,如果您担心它会在每次调用中使用相同的对象,它就不会。

于 2013-03-10T16:48:48.703 回答
1

无论您多久初始化一次,它都会创建新实例。Synchroniznied 关键字不能解决您的问题。

于 2013-03-10T16:49:39.913 回答