Java 中的多个线程 如何处理传递给它们的单个对象引用?
他们是复制一个对象然后使用它,还是使用同一个对象?
欢迎任何技术解释。
在上下文中我无法理解这一点,如果线程将一些数据传递给对象并进入休眠状态,而一个线程正在 sleep ,另一个线程使用相同的对象将数据传递给它并进入休眠状态。
最后一个数据会覆盖对象中的前一个数据吗?
最佳答案
你可以看看java内存模型。您会看到所有对象都存储在堆内存中,该内存在整个应用程序中共享。每个线程共享相同的堆空间,但它们也有自己的堆栈内存,用于存储对对象的引用。所以如果一个线程在对象上工作,它有自己对该对象的引用,但这个引用指向堆空间中的对象,每个线程都会看到。因此,要回答您的问题,如果第二个线程将对该对象执行某些操作,然后进入 hibernate 状态甚至死亡,则前一个线程在唤醒时将看到这些更改,因为它的引用指向同一个对象。
我找到了可以帮助您理解的有趣图像:
图片来自:http://tutorials.jenkov.com/java-concurrency/java-memory-model.html
关于java - 多个线程在java中使用同一个对象是否复制它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956753/