我讀了synchronized塊內部的代碼符合語義「之前發生」,讓所有的同步塊內寫入的值應該是在繼承其他線程可見。此外,我已經讀過,只有在同步塊終止的情況下刷新高速緩存。如果只有高速緩存刷新了同步塊終止,在以下描述的場景中如何執行'以前發生'的語義?行爲的同步
線程A具有參考對象C和在上C.同步其同步代碼改變℃的場 線程B也得到了一個參考對象C現在 線程A被暫停之前的同步代碼結束。 線程B在跳轉到操作和訪問對象C的字段中的代碼與下
現在被線程B保證看到由線程A所做的修改沒有同步?
我讀了synchronized塊內部的代碼符合語義「之前發生」,讓所有的同步塊內寫入的值應該是在繼承其他線程可見。此外,我已經讀過,只有在同步塊終止的情況下刷新高速緩存。如果只有高速緩存刷新了同步塊終止,在以下描述的場景中如何執行'以前發生'的語義?行爲的同步
線程A具有參考對象C和在上C.同步其同步代碼改變℃的場 線程B也得到了一個參考對象C現在 線程A被暫停之前的同步代碼結束。 線程B在跳轉到操作和訪問對象C的字段中的代碼與下
現在被線程B保證看到由線程A所做的修改沒有同步?
除了現有的答案,需要注意的是之前發生(X,Y),只保證是Y的X看到更新,而不是其他線程將看到X的結果Y.
的結果之前(在其實,你並不需要成爲一個synchronized塊裏面有之前發生在單個線程內相繼動作之間的關係。見17.4.5第一顆子彈在JLS。)
的要點是,線程B應該使用同步塊也一樣,如果線程B沒有使用任何同步的相同顯示器作爲線程A.
上進行同步時,改變可以或可以不可見。