方法参数在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是通过以下方式传递的:值)。在这种情况下,您需要提供显式同步以避免麻烦。