簡體   English   中英

Java:同步方法異常和寫入可見性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM