回覆列表
  • 1 # JAVA架構

    volatile是防止指令重排序來保證可見性

    對於JVM層面是防止編譯器的重排序

    同時,對於有些cpu來說,他們會透過快取鎖或者中線索來解決快取可見性

    但是,目前很多cpu都做了最佳化,因為快取一致性MESI會帶來效能開銷,所以用到了storebuffer機制來做非同步處理,而這種機制帶來了指令的亂序執行。從而導致可見性問題。

    那麼volatile會在cpu層面會增加記憶體屏障,來解決cpu的亂序執行帶來的可見性問題

  • 2 # 每天一個好影片

    volatile 是把變數標識為“變化中的”。

    意思是這個變數即使在(主執行緒)沒有任何存取操作的情況下也可能在(被其他執行緒)變化。

    寫上提醒注意執行緒安全。Java 1.4及之前版本加了這個的變數也沒有同步安全。Java 5以後加了volatile後會在讀取方面有同步安全。

  • 3 # simple204981511

    在Java中執行緒安全主要考慮原子性,可見性和有序性

    被volatile修飾的變數能夠保證每個執行緒能夠獲取該變數的最新值,即可見性

    在多執行緒環境中,一般針對基礎型別變數可以採用該關鍵字進行同步,但是要注意非原子性操作,如++等,一般我都會使用原子操作類,其原理中就採用了該關鍵字

  • 中秋節和大豐收的關聯?
  • 投資、買賣實物黃金哪些地方比較好?