在靜態類中不要處理靜態變數,會帶來併發風險

2022-04-10 23:25:11 字數 417 閱讀 6732

在靜態類中不要處理靜態變數,會帶來併發風險;

靜態方法內部的變數,若都是區域性變數,每次呼叫靜態方法時都會重新分配記憶體空間,就是安全的。

區域性變數:執行緒安全。

靜態變數:執行緒非安全。

靜態變數即類變數,位於方法區,為所有物件共享,共享乙份記憶體,一旦靜態變數被修改,其他物件均對修改可見,故執行緒非安全。

成員變數:單例模式(只有乙個物件例項存在)執行緒非安全,非單例執行緒安全。

成員變數為物件例項私有,在虛擬機器的堆中分配,若在系統中只存在乙個此物件的例項,在多執行緒環境下,「猶如」靜態變數那樣,被某個執行緒修改後,其他執行緒對修改均可見,故執行緒非安全;如果每個執行緒執行都是在不同的物件中,那物件與物件之間的成員變數的修改將互不影響,故執行緒安全。

python類靜態變數

python的類靜態變數直接定義在類中即可,不需要修飾符,如 class test stc attr 1def init self,attr1,attr2 self.attr1 attr1 self.attr2 attr2 在類test中,stc attr是屬於類test的靜態變數,attr1和at...

類靜態變數 問題

類的靜態成員變數 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...

在python中設定靜態變數

c語言中,在函式內部可以定義static型別的變數,這個變數是屬於這個函式的全域性物件。在python中也可以實現這樣的機制。def f if not hasattr f,x f.x 0 print f.x f.x 1 f 輸出1 f 輸出2def f class haha cnt 1 def in...