一、volatile是Java虛擬機提供的輕量級的同步機制 -保證可見性 -不保證原子性 -禁止指令重排 二、JMM你談談 JMM(Java內存模型,簡稱JMM)自己是一種抽象的概念並不真實存在 ,它描述的是一組規則或規範,經過這組規範定義了程序中各個變量(包括實例字段,靜態字段和構成數組對象的元素)的訪問方式。數組
JMM關於同步的規定: 1.線程解鎖前,必須把共享變量的值刷新回主內存。 2.線程加鎖前,必須讀取主內存的最新值到本身的工做內存。 3.加鎖解鎖是同一把鎖。線程
因爲JVM運行程序的實體是線程,而每一個線程建立時JVM都會爲其建立一個工做內存(有些地方稱爲棧空間),工做內存是每一個線程的私有數據區域,而Java內存模型中規定全部變量都存儲到 主內存,主內存是共享內存區域,全部線程均可以訪問,但線程對變量的操做(讀取、複製等)必須在工做內存中進行,首先要將變量從主內存拷貝到本身的工做內存空間,而後對變量進行操做,操做完成後再將變量寫回主內存,不能直接操做主內存中的變量,各個線程中的工做內存中存儲着主內存中的變量副本拷貝 ,所以不一樣的線程間沒法訪問對方的工做內存,線程間的通訊(傳值)必須經過主內存來完成,其簡要訪問過程以下圖:對象