轻量锁volatile
volatile是輕量級的讀鎖,它在多處理器開發中保證了共享變量的可見性
volatile保證讀的準確性,只能修飾屬性(變量)
public class liN {private volatile int a = 1;}可見性:在多線程高速緩存時,一個線程修改后,volatile將其他線程也進行修改,保證修改后其他線程讀到的數據是修改后的
如果一個字段被聲明成volatile,java線程模型確保所有線程看到這個變量的值是一致的
????????有volatile變量修飾的共享變量進行寫操作時會多出一行匯編代碼,通過查IA-32架構軟件開發者收手冊可知,Lock前綴的命令在多核處理器下會引發兩件事情:
????????1)將當前處理器緩存行的數據寫回到系統內存。
????????2)這個寫回內存的操作會使在其他CPU里緩存了該內存地址的數據無效。
????????在多處理器下,為了保證各個處理器的緩存是一致的,就會實現緩存一 致性協議,每個處理器通過嗅探在總線上傳播的數據來檢查自己緩存的值是不是過期了,當 處理器發現自己緩存行對應的內存地址被修改,就會將當前處理器的緩存行設置成無效狀 態,當處理器對這個數據進行修改操作的時候,會重新從系統內存中把數據讀到處理器緩存 里。
volatile的實現原則:
1)Lock前綴指令會引起處理器緩存回寫到內存中,緩存一致性機制會阻止同時修改兩個以上處理器緩存的內存區域數據。
2)一個處理器的緩存回寫到內存會導致其他處理器的緩存無效,處理器使用嗅探技術保證它的內部緩存、系統內存和其他處理器的緩存的數據在總線上保持一致
????????除了volatile,Java并發編程中應用較多的 是synchronized
總結
以上是生活随笔為你收集整理的轻量锁volatile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mindjet MindManager2
- 下一篇: 将铜皮换层