posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          volatile 與 synchronized 區別

          Posted on 2012-12-01 21:19 云云 閱讀(13714) 評論(0)  編輯  收藏

          在Java中,為了保證多線程讀寫數據時保證數據的一致性,可以采用兩種方式:

          同步

          如用synchronized關鍵字,或者使用鎖對象.

          volatile

          使用volatile關鍵字
          用一句話概括volatile,它能夠使變量在值發生改變時能盡快地讓其他線程知道.

          volatile詳解

          首先我們要先意識到有這樣的現象,編譯器為了加快程序運行的速度,對一些變量的寫操作會先在寄存器或者是CPU緩存上進行,最后才寫入內存.
          而在這個過程,變量的新值對其他線程是不可見的.而volatile的作用就是使它修飾的變量的讀寫操作都必須在內存中進行!

          volatile與synchronized

            volatile本質是在告訴jvm當前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住.
            volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.
            volatile僅能實現變量的修改可見性,但不具備原子特性,而synchronized則可以保證變量的修改可見性和原子性.
            volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.
            volatile標記的變量不會被編譯器優化,而synchronized標記的變量可以被編譯器優化.

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 六安市| 南汇区| 象州县| 左权县| 安图县| 湘潭市| 静安区| 裕民县| 泸溪县| 武安市| 永嘉县| 梧州市| 罗甸县| 景谷| 长汀县| 天等县| 通道| 澄城县| 巴马| 资兴市| 舞钢市| 黎川县| 寿宁县| 城市| 蕉岭县| 淮阳县| 香港 | 积石山| 贺州市| 屏南县| 新疆| 萨嘎县| 东至县| 乌拉特后旗| 邵阳县| 凉山| 汪清县| 湘阴县| 修文县| 东辽县| 安徽省|