如果我在同步方法或同步块内访问一个对象,那么该访问元素中的所有对象是否也都被同步了?
假设有一个对象Queue,其中具有同步的add()和take()方法,接收并处理复杂对象Thing。Thing中有许多列表,其中包含其他不同的对象。
现在想象线程Before创建Thing,并将一些现有对象放入Thing中,修改其中一些对象等等。Before线程将Thing添加到Queue中。稍后,线程After从Queue中取出Thing。
问题:Thing及其所有子/子对象是否与Before留下的状态相同?即使线程After可能早些时候正在处理其中一个子元素?因为我想像线程After的处理器仍然可能具有有关该子元素的某些缓存信息(该子对象的地址仍然相同)。只有通过以同步方式访问父对象Thing才能使所有这些缓存的东西无效?
假设有一个对象Queue,其中具有同步的add()和take()方法,接收并处理复杂对象Thing。Thing中有许多列表,其中包含其他不同的对象。
现在想象线程Before创建Thing,并将一些现有对象放入Thing中,修改其中一些对象等等。Before线程将Thing添加到Queue中。稍后,线程After从Queue中取出Thing。
问题:Thing及其所有子/子对象是否与Before留下的状态相同?即使线程After可能早些时候正在处理其中一个子元素?因为我想像线程After的处理器仍然可能具有有关该子元素的某些缓存信息(该子对象的地址仍然相同)。只有通过以同步方式访问父对象Thing才能使所有这些缓存的东西无效?