現在有個疑惑,比如現在有段代碼if(a>100){....}這段代碼運行在多線程環境下, 就是現在有多個線程來調用比如線程2拿到CPU執行權的時候這個a的值還是103呢,所以滿足if條件,但是剛判斷完滿足條件,還沒來得及執行里邊的代碼呢,這時候線程1搶走了CPU執行權,線程1把a的值改成90了,改完后,線程2又重新搶回了CPU執行權,我想問這個時候線程2還會再重新 if 判斷一下a的值嗎?還是同樣的問題,如果我把if改成while(),那么線程2回過頭來還會判斷一下括號里的條件嗎?還是同樣的問題,我把a變量用了volatile修飾后,會重新判斷嗎如果加上volatile后,不會重新判斷。那volatile不是保證立即可見性嗎?加上volatile就是為了讓線程1的修改對線程2立即可見,就是為了立即告訴線程2現在a已經是90了已經不滿足條件了, 不能再運行了,咱們想要的結果是這個。那如果加上后不會重新判斷的話,那就相當于加上volatile對我來說運行結果還是錯的,還是沒有達到預期的效果,那volatile有什么用呢
對多線程的一些迷惑,求解...
qq_v路過幸福_0
2018-03-05 16:53:43