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