synchronized
用法:a) synchronized amethod() {}
b) bmethod() }
c) cmethod( object object ) }
d) synchronized static dstaticmethod {}
e) estaticmethod }
1、synchronized 關鍵字的作用域有物件和類兩種
-- a、b、c 鎖的範圍是物件;d、e 鎖的範圍範圍是類
2、每個物件都包含了唯一的一把鎖(也叫作「監視器」);每個類也有唯一的一把鎖。
-- a、b 鎖在當前物件上;d、e 鎖在類上;c 鎖在object物件上
3、a、b 效果相同;d、e 效果相同
-- e 不能用類例項.getclass(),因為用classinstance.getclass()達不到鎖這個class的目的
(注意 a.class == a.getclass)
4、c 的最好實現如下,只需3條操作碼
private byte lock = new byte[0]
synchronized(lock)
爛七八糟:
synchronized amethod()
1、獲得當前物件鎖。防止多個執行緒同時訪問這個物件的 amethod 方法。
2、乙個物件只能有乙個鎖。
3、如果物件有多個synchronized方法,訪問了其中的乙個synchronized方法,其它執行緒不能再訪問這個物件的任意synchronized方法。
4、同類物件的不同例項的 synchronized 方法是不相干擾的。
synchronized static astaticmethod{}
1、獲得當前類的鎖。防止多個執行緒同時訪問這個類的 astaticmethod 方法。
2、對類的所有物件例項都起作用,乙個類只有乙個鎖。
3、p1.getclass() 不能當類的鎖
synchronized關鍵字是不能繼承的
synchronized關鍵字取得的鎖都是物件,不是把一段**或函式當作鎖
實現同步是要很大的系統開銷作為代價的,甚至可能造成死鎖,所以盡量避免無謂的同步控制。
synchronized 可作用於instance變數、物件引用、static函式 和class literals(類名稱字面常量)身上
Python 多執行緒學習02
這一次的目的是,兩個執行緒以方式合作,列印0 9的十個數字。不要漏,也不要重複。於是在上乙個程式的基礎上,修改一下,因為數字都存在content這個列表中,每次乙個執行緒先pop 出乙個數字,再列印,這樣,每個數字就只能被列印一次了。效果怎樣呢?試試吧。修改後的程式為 coding utf8 imp...
多執行緒02
什麼是使用者態和核心態 在作業系統裡面,作業系統的核心佔一部分記憶體,使用者應用程式佔一部分記憶體,核心即可以訪問自身的記憶體,也可以訪問使用者應用程式的記憶體,但是使用者應用程式只能訪問自身的記憶體,不能訪問核心的記憶體 執行緒的啟動 關閉 切換都要依賴於核心態 voliate 保證執行緒可見性 ...
多執行緒02 執行緒建立
1 方式一 繼承 thread 類,重寫run 方法,呼叫start 開啟執行緒 public class thread01 extends thread main 是主線程 public static void main string args throws interruptedexceptio...