[英]Java: synchronized method exception and write visibility
如果synchronized方法拋出異常,那么在該拋出之前在其中創建的成員寫入是否對其他線程可見? 例如
class Foo
{
private int x;
public synchronized void foo()
{
x++;
// some other code using x that throws RTE for a specific thread
}
}
如果在線程t1和t2之間共享Foo的對象,並且t1如圖所示拋出異常,那么將x的最新值刷新到主存儲器,以便當它為該對象輸入foo時它對t2可見?
是的,更改仍然可見 - 您仍然退出同步塊,在此過程中釋放監視器,而內存模型並不關心它是如何發生的 - 只是確實發生了。 它仍然是JLS第17.4.4節中的“在監視器上解鎖操作”,因此它與同一監視器上的下一個動作同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.