1. 程式人生 > >呼叫Spring所管理的bean的方法時候,為何不會出現執行緒安全問題?

呼叫Spring所管理的bean的方法時候,為何不會出現執行緒安全問題?

首先jvm會在記憶體中開闢一塊儲存空間做為執行緒棧空間,每個執行緒都有自己的棧(後進先出)。

呼叫方法時,會在棧中壓入一個棧幀,用來儲存這個方法的引數和區域性變數;

方法返回時 ,棧幀就會彈出,方法的引數和區域性變數就會清除;

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

 

Spring建立的bean預設是單例的,執行緒呼叫某個bean時,是持有一個bean物件的副本在自己的空間中,因為程式碼執行的速度很快,所以棧幀的生存時間很短,瞬間生滅。所以區域性變數無法被外部使用。當你呼叫這個bean物件的全域性變數時,就會出現執行緒安全問題了(這時候你需要把bean變為多例了)!