調用Spring所管理的bean的方法時候,爲何不會出現線程安全問題?

首先jvm會在內存中開闢一塊存儲空間做爲線程棧空間,每個線程都有自己的棧(後進先出)。

調用方法時,會在棧中壓入一個棧幀,用來存儲這個方法的參數和局部變量;

方法返回時 ,棧幀就會彈出,方法的參數和局部變量就會清除;

方法調用時,調用棧不斷處於漲落之中,如果調用的層級過深,調用棧可能會溢出

 

Spring創建的bean默認是單例的,線程調用某個bean時,是持有一個bean對象的副本在自己的空間中,因爲代碼執行的速度很快,所以棧幀的生存時間很短,瞬間生滅。所以局部變量無法被外部使用。當你調用這個bean對象的全局變量時,就會出現線程安全問題了(這時候你需要把bean變爲多例了)!

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