尤其是當多個線程對壹個變量自增活自減時會導致變量出錯。
參照《深入理解java虛擬機》壹書,volatile運用在以下場景:
1>運算結果並不依賴變量的當前值,或者能夠確保只有單壹的線程修改變量的值。
2>變量不需要與其他的狀態變量***同參與不變約束(表示看不懂這句)。
因此,在使用volatile關鍵字時要慎重,並不是只要簡單類型變量使用volatile修飾,對這個變量的所有操作都是原來操作,當變量的值由自身的 上壹個決定時,如n=n+1、n++等,volatile關鍵字將失效,只有當變量的值和自身上壹個值無關時對該變量的操作才是原子級別的,如n = m+1,這個就是原級別的。所以在使用volatile關鍵時壹定要謹慎,如果自己沒有把握,可以使用synchronized來代替volatile。