【问题标题】:Java: thread safe class instancesJava:线程安全的类实例
【发布时间】:2013-03-11 01:26:14
【问题描述】:

我有以下两个类:

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

非常感谢

【问题讨论】:

  • 我们很高兴看到以下 java 命名约定。
  • 嗨阿米特,你是什么意思?
  • 在编写方法名时使用驼峰式大小写,在编写类名时使用帕斯卡式大小写(您遵循类名)
  • 遵循 Amit 建议的命名约定。

标签: java


【解决方案1】:

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

【讨论】:

  • 谢谢凯文。我现在对此很偏执,所以再次确认一下。即使在代码中我们正在创建一个新实例“sC”,但在内存中它总是一个不同的新实例?谢谢
【解决方案2】:

只要您不访问可以被其他线程更改的变量(类的成员或静态变量),如果您只是在静态方法(或任何其他方法),因为每个方法都有自己的变量堆栈。

具体到你的问题:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多