java自增的線程安全問題

一、自增會帶來線程安全問題嗎?爲什麼?

會!

1.i++在字節碼層面分爲三步:保存當前值,執行添加操作,更新新值

2.多線程操作時,可能會同時獲取到舊值(假設爲1),添加操作後爲2,第一個線程刷新新值爲3,第二個刷新還是3。

二、volatile可以保證線程安全嗎?

不可以!

volatile只能保證可見性,以及順序性

但是不能保證多個線程同時操作

三、如何保證線程安全?

synchronized,將方法原子化

automicInteger.getAndSwap

 

參考文章:https://www.cnblogs.com/zhengbin/p/5653051.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章