Java中Volatile表示什麼

來源:互聯網
上載者:User

標籤:

Java中volatile修飾符是一種用來保證不同線程之間互動的特殊機制。當一個線程修改volatile變數,另一個線程能夠看到這個修改。第一個線程通知第二個線程變數已經被修改。

下面用圖來解釋:

ready是一個volatile boolean變數, 初值設為false. answer是一個非volatile int變數,初值是0.

第一個線程準備好修改ready變數,它是兩個線程交流的發送方。第二個線程讀取ready變數,擷取第一個線程修改的值,因此它是接收方。在兩個線程交流時,線上程1修改ready變數前,記憶體中所有變數對線程1可見,線上程2準備好讀取ready變數的值true後,記憶體中所有變數必須對線程2可見。

這就保證了如果線程要輸出什麼的值的話,那就是42.

如果ready不是volatile的,那會發生什麼呢?線上程1和線程2之間將不會有任何明顯的交流。

線程1修改ready(現在是non-volatile)後的值可能會傳遞給線程2,因此線程可能可以讀取ready的值true. 然而,線程1也可能不會將修改後的ready的值傳遞給線程2,answer的值也不會傳遞給線程2,那麼線程2將會輸出0.

 

參考資料:

http://jeremymanson.blogspot.jp/2008/11/what-volatile-means-in-java.html

 

Java中Volatile表示什麼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.