現(xiàn)在有個(gè)疑惑,比如現(xiàn)在有段代碼if(a>100){....}這段代碼運(yùn)行在多線程環(huán)境下, 就是現(xiàn)在有多個(gè)線程來(lái)調(diào)用比如線程2拿到CPU執(zhí)行權(quán)的時(shí)候這個(gè)a的值還是103呢,所以滿足if條件,但是剛判斷完滿足條件,還沒來(lái)得及執(zhí)行里邊的代碼呢,這時(shí)候線程1搶走了CPU執(zhí)行權(quán),線程1把a(bǔ)的值改成90了,改完后,線程2又重新?lián)尰亓薈PU執(zhí)行權(quán),我想問(wèn)這個(gè)時(shí)候線程2還會(huì)再重新 if 判斷一下a的值嗎?還是同樣的問(wèn)題,如果我把if改成while(),那么線程2回過(guò)頭來(lái)還會(huì)判斷一下括號(hào)里的條件嗎?還是同樣的問(wèn)題,我把a(bǔ)變量用了volatile修飾后,會(huì)重新判斷嗎如果加上volatile后,不會(huì)重新判斷。那volatile不是保證立即可見性嗎?加上volatile就是為了讓線程1的修改對(duì)線程2立即可見,就是為了立即告訴線程2現(xiàn)在a已經(jīng)是90了已經(jīng)不滿足條件了, 不能再運(yùn)行了,咱們想要的結(jié)果是這個(gè)。那如果加上后不會(huì)重新判斷的話,那就相當(dāng)于加上volatile對(duì)我來(lái)說(shuō)運(yùn)行結(jié)果還是錯(cuò)的,還是沒有達(dá)到預(yù)期的效果,那volatile有什么用呢
對(duì)多線程的一些迷惑,求解...
qq_v路過(guò)幸福_0
2018-03-05 16:53:43