【发布时间】:2011-11-26 14:29:19
【问题描述】:
我需要一些帮助来理解 Java 内存模型。以下是一个通用示例来掌握基本概念:
Image 我有一个名为Shared 的对象实例和两个线程A 和B。此外,还有某种Queue 与同步的put 和take。
线程A 修改Shared-instance before 和in put 方法。
问题1:当B通过同步的take-方法获得Shared-object实例时,A的所有变化是可见的?
问题 2:一旦A 离开同步的put 方法,就会刷新内存缓存(Shared 上的所有更改都是可见的)。如果wait() 在put 方法中被A 调用,会发生什么?即使A 尚未退出synchronized 方法,B 是否也会看到对Shared 所做的更改?调用wait()时缓存是否也被刷新?
【问题讨论】:
-
非常混乱的问题。也许一些代码示例。例如,队列如何改变put方法中传递的对象?
标签: java synchronization monitor synchronized java-memory-model