多個執行緒多個鎖
多個執行緒多個鎖:多個執行緒,每個執行緒都可以拿到自己制定的鎖,分別獲得鎖之後,執行synchronized方法體的內容。就是在上次那個部落格上說道的鎖競爭的問題,是因為所有的執行緒過來以後都爭搶同乙個鎖。如果說每個執行緒都可以或得到自己的鎖,這樣的話我們的鎖競爭問題就沒有了,如果這樣做的話,我們去例項化乙個物件,我們怎麼可以保證多執行緒可以並行操作,並行操作完成之後又不會相互之間影響。最終的操作結果就是一樣的,最簡單的就是在類上面加上static,或者使用原子的方式,來避免鎖競爭問題。
示例**
package nihui.test.cn;
public class mutlithread else
system.out.println("tag" + tag + "num" + num);
} catch (exception e)
} public static void main(string args)
});
thread t2 = new thread(new runnable()
});
t1.start();
t2.start();
}}
執行結果
示例總結:
關鍵字synchronized獲取到的鎖都是物件鎖,而不是把一段**(方法)當做鎖,所以示例**中那個執行緒先執行synchronized關鍵字的方法,那個執行緒就持有該方法所屬的物件鎖lock,兩個物件,執行緒獲得就是兩個不同的鎖,他們互不影響。
有一種情況則是相同的鎖,即在靜態方法上夾上synchronized關鍵字,表示鎖定.class 類,類一級別的鎖(獨佔.class類)
java併發 多個執行緒間共享資料
先看乙個多執行緒間共享資料的問題 設計四個執行緒,其中兩個執行緒每次對data增加1,另外兩個執行緒每次對data減少1。從問題來看,很明顯涉及到了執行緒間通資料的共享,四個執行緒共享乙個data,共同操作乙個data。我們先把上面這個問題放在一邊,慢慢分析多個執行緒之間共享資料的一些情況,從最簡單...
JAVA 併發程式設計 多個執行緒之間共享資料(六)
1。假設每乙個執行緒執行的 同樣。能夠使用同乙個 runnable 物件,這個 runnable 物件中有那個共享資料,比如,賣票系統就能夠這麼做。2,假設每乙個執行緒執行的 不同。這時候須要用不同的 runnable 物件,比如,設計4個執行緒。當中兩個執行緒每次對j新增1。另外兩個執行緒對j每次...
併發程式設計(2) 多個物件多個鎖
一 基本概念 多個執行緒多個鎖 多個執行緒,每個執行緒都可以拿到自己指定的鎖,分別獲得鎖之後,執行synchronized方法體的內容。二 示例 public class multithread else system.out.println tag tag num num catch except...