多執行緒02

2021-10-01 08:26:37 字數 990 閱讀 7033

什麼是使用者態和核心態

在作業系統裡面,作業系統的核心佔一部分記憶體,使用者應用程式佔一部分記憶體,核心即可以訪問自身的記憶體,

也可以訪問使用者應用程式的記憶體,但是使用者應用程式只能訪問自身的記憶體,不能訪問核心的記憶體

執行緒的啟動、關閉、切換都要依賴於核心態

voliate

保證執行緒可見性

禁止指令重排序

執行緒安全的單例

object object = new object();

變數本質上對應乙個位址,此位址根據資料型別儲存相應的值

jvm建立乙個物件分為三步:

1.為物件申請記憶體

2.給這個物件的成員變數賦零值

3.把記憶體的位址賦值給變數

如果不禁止指令重排序,那麼有可能第2步有可能發生在第3步之後,即申請完記憶體,就把記憶體的位址賦值給了變數,

然後再去給成員變數初始化。在多執行緒環境下,若有其他的執行緒在第2步還沒發生就拿到了這個物件,則會發生執行緒

安全問題

鎖優化:

鎖細化:盡量減小加鎖**的範圍

鎖粗化:鎖爭用特別頻繁的時候。例如一段**中有大量細化的鎖,不如粗化來處理

鎖定物件object,如果object的屬性發生改變,不影響鎖的使用,但是如果object被改變為另外的乙個物件,則鎖定的

物件發生改變,應該避免將鎖定物件的引用變為另外的物件,使用final關鍵字來實現

原子類:atom***,內部使用cas(compare and set)實現

*/cas(value, excepted, newvalue)

otherwise try again or fail

}cas是cpu指令級別的支援,中間不能被打斷

aba問題:在cas操作的過程中,值發生改變,但又回到了期望的值

aba產生的問題:如果是基礎型別,沒有影響;如果是引用型別,因為位址沒有改變,物件內部發生改變,

將會引發邏輯問題

unsafe類,cas的實現依賴於unsafe類

多執行緒02 執行緒建立

1 方式一 繼承 thread 類,重寫run 方法,呼叫start 開啟執行緒 public class thread01 extends thread main 是主線程 public static void main string args throws interruptedexceptio...

Python 多執行緒 (02)

當多個執行緒同時訪問乙個變數的時候,會產生共享變數的問題。問題解決 鎖 是乙個標誌,表示乙個執行緒正在占用一些資源 訊號燈 鎖的使用方法 上鎖,使用共享資源,放心的用,取消鎖,釋放鎖。案例1import threading sum 0 loopsum 1000000 lock threading.l...

Python 多執行緒學習02

這一次的目的是,兩個執行緒以方式合作,列印0 9的十個數字。不要漏,也不要重複。於是在上乙個程式的基礎上,修改一下,因為數字都存在content這個列表中,每次乙個執行緒先pop 出乙個數字,再列印,這樣,每個數字就只能被列印一次了。效果怎樣呢?試試吧。修改後的程式為 coding utf8 imp...