首先,先傳代碼,有圖片,也有文件,看不清的朋友可以直接下載文件回去跑一下,感受一下。
我解釋一下吧,大概意思就是在一個線程裏面不斷的跑,如果a=0,就把a加到5,然後建立子線程,再在子線程裏面把a減到0。預想的結果是這個循環會無限的執行打印語句,但是事實上,並沒有。因爲進不去 if 語句。也就是說,雖然子線程把a減到了0,主存中的a等於0,但是在main裏面new出來的線程裏面的a不等於0。
這是線程的工作內存問題,不知道工作內存的去百度吧,這裏就不贅述了。我直接說解決方案吧:
②讀如果不上鎖也行,但是a變量要聲明爲volatile。
③使用atomic包,簡單粗暴。