java併發程式設計(二)多個執行緒多個鎖

2021-08-17 14:22:59 字數 912 閱讀 7578

多個執行緒多個鎖

多個執行緒多個鎖:多個執行緒,每個執行緒都可以拿到自己制定的鎖,分別獲得鎖之後,執行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...