2010-10-17 70 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.

上進行同步時,改變可以或可以不可見。