Fra*_*fka 10 java parallel-processing concurrency synchronization monitor
如果我访问同步方法或同步块内的对象,那个被访问元素中的所有对象是否也同步?
想象一下,有一个对象Queue
具有同步add()
和take()
方法,接受并分发复杂对象Thing
.Thing
有很多列表与其他不同的对象.
现在,图像线程Before
创建Thing
并放入一些现有对象Thing
,修改其中一些对象,依此类推.该Before
线增加Thing
至Queue
.稍后一点线程After
从中Thing
获取Queue
.
问题:Will Thing
及其所有子/子对象是否处于Before
离开它们的状态?即使线程After
可能稍早在这些子元素中的一个上工作?因为我映像处理器的线程After
可能仍然有一些关于该子元素的缓存信息(该子对象的地址仍然相同).只有通过Thing
同步方式访问父对象,所有这些缓存的东西才会失效?
请不要给出使用并发库等的答案.我想了解发生了什么.
如果一个线程修改了一个变量,那么另一个线程不能保证看到更改,除非在下列情况下(好吧,至少在以下情况下;我不是100%确定是否有更多):
volatile
或者它是来自的原子变量之一java.util.concurrent.atomic
因此,如果您按照说明进行同步,其他线程将看到所有更改.
归档时间: |
|
查看次数: |
1757 次 |
最近记录: |