【问题标题】:concurrent access to static methods in java, is synchronization needed?在java中并发访问静态方法,是否需要同步?
【发布时间】:2011-08-16 17:04:31
【问题描述】:

访问方法“foo”的不同线程是否有自己的局部变量副本,或者需要使该方法同步?

class X {
   static returnType foo( Object arg) {
      Object localvar;
      // perform some calculation based on localvar and arg.
      // no non-local variable is used i.e: this is a utility method.
      // return something.
   }
}

【问题讨论】:

  • 我可以推荐《Java 并发实践》一书,以解决您可能遇到的任何其他问题。

标签: multithreading concurrency static synchronization


【解决方案1】:

您不需要同步该方法。局部变量是在当前线程的“内存空间”中创建的,任何其他线程都无法访问它(从上面显示的内容)。

【讨论】:

    【解决方案2】:

    由于使用的变量是在它自己的范围内定义/使用的,因此不需要同步方法。

    【讨论】:

      【解决方案3】:

      该方法不应同步,但您应该使用最终变量 arg 即
      static returnType foo(final Object arg)。

      【讨论】:

      • 我不明白你为什么会建议这个
      • 由于 arg 仅用于计算,其值不应改变。使用 final 关键字,您只需确保它的值不会改变。在多线程的上下文中,您只需确保计算准确,特别是如果 arg 可以共享。
      • Arg 无法共享。它完全是线程本地的。更改 arg 的值不会影响传入的对象引用。
      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2012-12-17
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多