天天看點

關于Volatile關鍵字的一點個人了解

    當我們聲明共享變量為volatile後,該變量的更新将會對其他線程具有記憶體可見性,本質就是通過線程間這種資料更新通知來實作資料同步,而傳統的做法通過加鎖的方式來實作資料同步,但由于鎖的性能損耗太大,是以有了通過volaitle關鍵字來通過無鎖的方式來達到同樣的目的.ok,扯了半天廢話,直接上我畫的草圖吧,各位看官如果覺得我哪裡說的不妥,請下方留言指正,謝謝!

關于Volatile關鍵字的一點個人了解

     結束語:volatile關鍵字隻保證單一操作的多線程之間記憶體可見性,但如果讀和寫等多個操作混雜在一起,則他們之間的記憶體可見性不做保證,這取決于作業系統環境和jvm實作.一般建議volatile用于單一的寫操作比如指派操作,像累加操作就不适合用volatile.是不是包含多個操作這不能單單看代碼行數,可能一句代碼但底層暗含了多步操作,比如xxxx xx = new xxxx()操作,就至少暗含了new操作(即記憶體空間配置設定操作)和等号=指派操作.

轉載:http://iamyida.iteye.com/blog/2255687