課程
/后端開發(fā)
/Java
/細說Java多線程之內(nèi)存可見性
volatile 和 synchronized的作用 跟 C++中靜態(tài)變量static 的作用是不是一樣??
2017-02-21
源自:細說Java多線程之內(nèi)存可見性 4-1
正在回答
olatile本質(zhì)是在告訴jvm當前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住.volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.volatile僅能實現(xiàn)變量的修改可見性,但不具備原子特性,而synchronized則可以保證變量的修改可見性和原子性.volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.volatile標記的變量不會被編譯器優(yōu)化,而synchronized標記的變量可以被編譯器優(yōu)化.
靜態(tài)變量是在初始時賦值,如果多線程操作,是會有競爭問題,不能保證多線程的內(nèi)存可見性。
不一樣
舉報
用兩種方式實現(xiàn)內(nèi)存可見性,代領(lǐng)大家深層次學習Java中的內(nèi)存
3 回答共享變量和volatile變量區(qū)別
1 回答volatile與synchcronized區(qū)別
1 回答為什么兩個volatile變量在不變式中就會使得volatile線程不安全?
1 回答關(guān)于64位變量加volatile關(guān)鍵字的問題
9 回答不是說volatile不保證原子性嗎?為什么對于64位類型的變量用volatile修飾?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-04-08
olatile本質(zhì)是在告訴jvm當前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住.
volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.
volatile僅能實現(xiàn)變量的修改可見性,但不具備原子特性,而synchronized則可以保證變量的修改可見性和原子性.
volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.
volatile標記的變量不會被編譯器優(yōu)化,而synchronized標記的變量可以被編譯器優(yōu)化.
靜態(tài)變量是在初始時賦值,如果多線程操作,是會有競爭問題,不能保證多線程的內(nèi)存可見性。
2017-02-27
不一樣