Java:线程安全的类实例

时间:2013-03-10 16:46:22

标签: java

我有以下两个类:

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同步,这会解决问题吗?

非常感谢

3 个答案:

答案 0 :(得分:1)

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

具体到你的问题:

它将始终创建一个新实例。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

无论您多久创建一个实例,它始终会创建新实例。 Synchroznied关键字不能解决您的问题。