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

          volatile 與 synchronized 區(qū)別

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

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

          同步

          如用synchronized關(guān)鍵字,或者使用鎖對象.

          volatile

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

          volatile詳解

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

          volatile與synchronized

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 太康县| 剑川县| 沐川县| 靖江市| 大姚县| 上虞市| 福泉市| 平山县| 巴东县| 尼玛县| 宕昌县| 抚远县| 罗源县| 梁平县| 龙州县| 长寿区| 东安县| 公安县| 舞钢市| 安福县| 宝山区| 综艺| 西林县| 琼海市| 安达市| 望谟县| 奉新县| 青铜峡市| 永寿县| 建阳市| 尉犁县| 上饶市| 堆龙德庆县| 洪江市| 斗六市| 霸州市| 嘉祥县| 信宜市| 宜宾市| 新疆| 晋江市|