線程安全性(三)

可見性

不可見的原因.jpg
synchronized.png
image.png

volatile變量在每次被線程訪問時都強迫從主內中讀取該變量的值,而該變量發(fā)生變化時都會強迫線程將該變量的值刷新到主內存中,這樣,任何時候所有線程都能看到該變量的最新值

volatile寫.png
volatile讀.png
 /**
     *  當兩個線程同時執(zhí)行了第一步, 就都讀到了count的值, 比如是5
     *  兩個線程同時執(zhí)行了+1操作并寫回主存,這樣就丟了一次+1的操作,結果是6問不是5
     */
    public static void add(){
        // 1. 去讀內存中的count值
        // 2. +1
        // 3. count寫回主存
        count++;
    }

volatile 不具有原子性

使用volatile需要具備兩個條件:

  1. 對變量的寫操作不依賴于當前值
  2. 該變量沒有包含在具有其他變量的不變的式子中,因此volatile特別適合作為狀態(tài)標記量。
    boolean.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文基于周志明的《深入理解java虛擬機 JVM高級特性與最佳實踐》所寫。特此推薦。 衡量一個服務性能的高低好壞,...
    陽光的技術小棧閱讀 1,207評論 0 3
  • 線程同步 在大多數實際的多線程應用中, 兩個或兩個以上的線程需要共享對同一數據的存取。多個線程或者進程在讀寫一個共...
    Steven1997閱讀 2,049評論 0 3
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,816評論 11 349
  • 時過境遷,隨著歲月的變化,我們越走越遠。多想還像個孩子一樣,撿起地上的沙子,從手間滑過,不曾被風吹起,不曾被雨...
    二十二歲的星期五閱讀 504評論 4 1
  • 醫(yī)生正直且有職業(yè)素養(yǎng),手術臺上本應生死有命,她卻偏執(zhí)地不認命,因此痛苦不已;警察冷靜縝密且忠肝義膽,為維護正義,不...
    李白云閱讀 395評論 3 3

友情鏈接更多精彩內容