2010-10-17 68 views
0

我读了synchronized块内部的代码符合语义“之前发生”,让所有的同步块内写入的值应该是在继承其他线程可见。此外,我已经读过,只有在同步块终止的情况下刷新高速缓存。如果只有高速缓存刷新了同步块终止,在以下描述的场景中如何执行'以前发生'的语义?行为的同步

线程A具有参考对象C和在上C.同步其同步代码改变℃的场 线程B也得到了一个参考对象C现在 线程A被暂停之前的同步代码结束。 线程B在跳转到操作和访问对象C的字段中的代码与下

现在被线程B保证看到由线程A所做的修改没有同步?

回答

0

除了现有的答案,需要注意的是之前发生(X,Y),只保证是Y的X看到更新,而不是其他线程将看到X的结果Y.

的结果之前(在其实,你并不需要成为一个synchronized块里面有之前发生在单个线程内相继动作之间的关系。见17.4.5第一颗子弹在JLS。)

3

的要点是,线程B应该使用同步块也一样,如果线程B没有使用任何同步的相同显示器作为线程A.

上进行同步时,改变可以或可以不可见。