【進階java程式員應該知道的小知識】 volatile

來源:互聯網
上載者:User

標籤:volatile   java   進階   程式員   

本篇態度: simple & stupid volatile用法:
private volatile Service.STATE state;
優點:
  1. 比其他的鎖機制(synchronized、lock)簡單;
  2. 不阻塞;
  3. 對volatile修飾的變數允許並發讀.
謹記:

Java Memory Model ensures that all threads see a consistent value for the variable

  • volatile提供變數修改後對其他線程的可見度。

變數被一個線程修改後,其他線程並發讀到的變數值是一致的,僅保證此變數讀和寫的原子性。

  • volatile修飾的共用變數不能作為多線程環境的計數器(i++),計數器需要其它同步手段。
 i++ 等價於 : //從記憶體擷取i get(i);//(1) //i值加1 i = i + 1;//(2) //將i的值寫回記憶體 set(i);//(3) 操作(1)、(2)、(3)串起來的執行路徑不是原子性的.
  • final不能與volatile同時使用.
推薦使用情境:

讀遠比寫多的時候,可以使用此關鍵字,同時給寫方法加鎖,來實現開銷更小的讀-寫鎖:

//使用voletile修飾state,提供跨線程的記憶體可見度(變數一致性)private volatile Service.STATE state;//讀 - 不會阻塞,可並發讀public Service.STATE getState() {    return state;  }//寫 - 使用synchronized修飾以保證原子性public synchronized Service.STATE enterState(Service.STATE proposed) {  Service.STATE oldState = state;  state = proposed;  return oldState;}

【著作權@foreach_break 轉載請註明出處 部落格地址http://blog.csdn.net/gsky1986】

【進階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.