多個執行緒,每個執行緒都可以拿到自己指定的鎖,分別獲得鎖之後,執行synchronized方法體的內容。
m1,m2兩個不同的物件呼叫printnum兩個執行緒都進到printnum方法裡了,如果m1進到執行緒裡,則列印結果輸出tar a num=100,然後輸出
,而**的結果是m1,m2同時進來。
總結:乙個物件一把鎖(也就是說,兩個執行緒分別是得到m1,m2這兩個物件的鎖,他們兩個沒有任何關係)
如果說有一天當前有乙個執行緒執行printnum方法,我就不希望其他的執行緒進來執行,怎麼辦呢??
在方法上加static,全域性變數加static,表示的是在靜態的方法上加上synchronized修飾,那麼這個執行緒呼叫printnum所或得的鎖,就是class這個類級別的鎖,無論例項化多少個物件,都沒有任何關聯關係。也就是說t1,t2執行緒有乙個先後執行的順序。
關鍵字synchronized取得的鎖都是物件鎖,而不是把一段**(方法)當作鎖,示例**中那個執行緒先執行synchronized關鍵字的方法,那個執行緒就持有該方法所屬物件的鎖,(lock),兩個物件,執行緒獲得的就是兩個不同的鎖,他們互不影響。
有一種情況則是相同的鎖,即在靜態方法上加上synchronized關鍵字,表示鎖定.class類,類一級別的鎖,(獨佔,class類)。
java併發程式設計(二)多個執行緒多個鎖
多個執行緒多個鎖 多個執行緒多個鎖 多個執行緒,每個執行緒都可以拿到自己制定的鎖,分別獲得鎖之後,執行synchronized方法體的內容。就是在上次那個部落格上說道的鎖競爭的問題,是因為所有的執行緒過來以後都爭搶同乙個鎖。如果說每個執行緒都可以或得到自己的鎖,這樣的話我們的鎖競爭問題就沒有了,如果...
併發程式設計(2) 多個物件多個鎖
一 基本概念 多個執行緒多個鎖 多個執行緒,每個執行緒都可以拿到自己指定的鎖,分別獲得鎖之後,執行synchronized方法體的內容。二 示例 public class multithread else system.out.println tag tag num num catch except...
執行緒傳入多個引數
2種方式 一 把引數當做全域性變數,不過這個藐視 結構不合理,個人覺得還是結構體指標的方式比較好。二 定義乙個結構體的指標傳入 21 struct param 45 int fd 0 46 string deskey 47 param a 48 a.fd fd 49 a.deskey deskey ...