天天看點

Spring的單例Bean與線程安全問題

  • Spring架構裡的bean,或者說元件,擷取執行個體的時候都是預設的單例模式
  • 線程安全問題都是由成員變量及靜态變量引起的。
  • 若每個線程中對成員變量、靜态變量隻有讀操作,而無寫操作,一般來說,這個成員變量、靜态變量是線程安全的;
  • 若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。
  • 當多個線程調用方法時會不會出現線程安全問題呢?答案是不會,方法存在虛拟機棧中,是線程私有的。

成員變量、局部變量、靜态變量的差別

成員變量 局部變量 靜态變量
别名 執行個體變量 類變量
定義位置 在類中,方法外 方法中,或者方法的形式參數 在類中,方法外
初始化值 有預設初始化值 無,先定義,指派後才能使用 有預設初始化值
調用方式 對象調用 對象調用,類名調用
生命周期 與對象共存亡 與方法共存亡 與類共存亡
存儲位置 堆中 棧中 方法區

推薦文章:

聊一聊Spring中的線程安全性

JVM記憶體模型