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