volatile相關經典面試題
- 談談volatile的特性
- volatile的內存語義
- 說說并發編程的3大特性
- 什么是內存可見性,什么是指令重排序?
- volatile是如何解決java并發中可見性的問題
- volatile如何防止指令重排
- volatile可以解決原子性嘛?為什么?
- volatile底層的實現機制
- volatile和synchronized的區別?
談談volatile的特性
volatile的內存語義
- 當寫一個 volatile 變量時,JMM 會把該線程對應的本地內存中的共享變量值刷新到主內存。
- 當讀一個 volatile 變量時,JMM 會把該線程對應的本地內存置為無效。線程接下來將從主內存中讀取共享變量。
說說并發編程的3大特性
- 原子性
- 可見性
- 有序性
什么是內存可見性,什么是指令重排序?
- 可見性就是指當一個線程修改了共享變量的值時,其他線程能夠立即得知這個修改。
- 指令重排是指JVM在編譯Java代碼的時候,或者CPU在執行JVM字節碼的時候,對現有的指令順序進行重新排序。
volatile是如何解決java并發中可見性的問題
底層是通過內存屏障實現的哦,volatile能保證修飾的變量后,可以立即同步回主內存,每次使用前立即先從主內存刷新最新的值。
volatile如何防止指令重排
也是內存屏障哦,跟面試官講下Java內存的保守策略:
- 在每個volatile寫操作的前面插入一個StoreStore屏障。
- 在每個volatile寫操作的后面插入一個StoreLoad屏障。
- 在每個volatile讀操作的前面插入一個LoadLoad屏障。
- 在每個volatile讀操作的后面插入一個LoadStore屏障。
技術學習總結
學習技術一定要制定一個明確的學習路線,這樣才能高效的學習,不必要做無效功,既浪費時間又得不到什么效率,大家不妨按照我這份路線來學習。
最后面試分享
大家不妨直接在牛客和力扣上多刷題,同時,我也拿了一些面試題跟大家分享,也是從一些大佬那里獲得的,大家不妨多刷刷題,為金九銀十沖一波!
NdPiv-1624225717731)]
[外鏈圖片轉存中…(img-837Mv9YK-1624225717733)]
最后,若需要完整pdf版,可以點贊本文后點擊這里免費領取