方法参数在Java中线程安全吗?


问题内容
Class Shared{    
     public void sharedMethod(Object o){
          //does something to Object
     }     
}

//this is how threads call the shared method
run(){
     sharedInstance.sharedMethod(someObject);
}

现在,o会将用作参数传递给方法。多个线程并行调用同一方法。我们可以安全地说此代码是线程安全的吗?

有两种情况:

  • 如果someObject在线程之间共享
  • 如果每个线程都有自己的副本 someObject

问题答案:

不,你不能这么说。方法参数是线程局部的,这意味着每个参数都有其自己的o参考变量副本,但是,如果您从多个线程中使用相同的对象调用此方法,则参数将在它们之间共享(请记住,Java是通过以下方式传递的:值)。在这种情况下,您需要提供显式同步以避免麻烦。