java - 方法参数在 Java 中是线程安全的吗?

标签 java multithreading thread-safety method-parameters

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/

相关文章:

c# - C# BlockingCollection 的 TryTakeFromAny 是否保证顺序检查 BlockingCollection 对象?

java - 将类从线程不安全迁移到线程安全

c++ - 单例类和线程安全

multithreading - 在实时应用程序中检测死锁的方法

java - 如何在 Eclipse 外部的远程 tomcat 服务器上部署 Web 项目,其中包含 .jar 文件

java - 在 IntelliJ Community 2017.1 中运行 Spring 启动测试时出错

java - 定时器执行错误

java - 使用并发 HashMap 时结果不一致

java - 使用 REGEX 验证坐标格式是否正确

c++ - 使用 SendMessage() 多线程