【发布时间】:2011-11-05 10:24:17
【问题描述】:
如果我访问同步方法或同步块中的对象,该访问元素中的所有对象是否也同步?
假设有一个对象Queue 具有同步的add() 和take() 方法,接受并分发复杂对象Thing。 Thing 有很多列表,其中包含其他不同的对象。
现在图像线程Before 创建Thing 并将一些现有对象放入Thing,修改其中一些对象等等。 Before 线程将Thing 添加到Queue。稍后线程After 从Queue 获取Thing。
问题:Thing 及其所有子对象/子对象与Before 留下的状态是否相同?即使线程After 可能更早地处理这些子元素之一?因为我对线程After 的处理器进行了映像,所以可能仍然有一些关于该子元素的缓存信息(该子对象的地址仍然相同)。所有这些缓存的东西只有通过同步访问父对象Thing才会失效?
请不要给出使用并发库之类的答案。我想了解发生了什么。
【问题讨论】:
标签: java concurrency synchronization parallel-processing monitor