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 是按值传递的)。在这种情况下,您需要提供显式同步以避免麻烦。
关于java - 方法参数在 Java 中是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547636/