在我的应用程序中,我有一个静态方法,该方法同时从多个线程中调用。我的数据有混淆的危险吗?

在我的第一次尝试中,该方法不是静态的,并且我正在创建该类的多个实例。在这种情况下,我的数据会以某种方式混淆。我不确定这是怎么发生的,因为它只是偶尔发生。我还在调试。
但是现在该方法是静态的,到目前为止我还没有问题。也许只是运气。我不确定

最佳答案

在方法内部声明的变量(“捕获的”变量可能异常(exception))是隔离的,因此您不会遇到任何固有的问题。但是,如果您的静态方法访问任何共享状态,则所有选择都将关闭。

共享状态的示例为:

  • 静态字段
  • 从公共(public)缓存(未序列化)访问的
  • 对象
  • 通过输入参数(以及这些对象的状态)获得的
  • 数据(如果多个线程可能接触同一个对象)

  • 如果您拥有共享状态,则必须执行以下任一操作:
  • 小心不要在共享状态后对其进行突变(更好:使用不可变的对象表示状态,并将状态快照制作为局部变量-即,而不是重复引用whatever.SomeData,您应将读入whatever.SomeData ,将读入一个局部变量,然后只使用变量-请注意,这仅对不可变状态有用!)
  • 同步对数据的访问(所有线程必须同步)-互斥或(更精细的)读取器/写入器
  • 10-07 23:10