多執行緒 該使用哪種鎖物件

2022-03-11 17:56:32 字數 660 閱讀 9345

lock關鍵字鎖定的**塊中,這樣兩個執行緒不能處理在同一時間的同一**塊。當乙個執行緒退出鎖定塊,其他執行緒可以進入鎖定的**塊。 monitor類提供了相同的功能,但您指定的開始和與monitor.enter和monitor.exit鎖定**塊的結尾。對於這兩種方式,您需要乙個變數來鎖定。乙個常見的模式是鎖定在乙個類或typeof運算(型別)為靜態資料例項資料的。

using system; 

using system.threading;

public class lockobject

public static void lockincrement()

}}

本typeof運算(型別)也可引起在乙個不相關的**塊之外的完全不同的同步塊鎖定物件的問題。

其結果將導致兩種完全不同的同步塊同步兩個不同的資料集從而阻止對方。其實可以使用乙個字串作為乙個鎖變數,因為所有的字串指的是同乙個例項。這些問題都可以通過乙個私有唯讀欄位來鎖定!

public class lockobject

public static void lockincrement()

}}

鎖定的物件是私有因此它不能在類外部使用的**塊作為鎖定物件!唯讀屬性防止變數改變。

該例子中的問題通過使用interlocked.increment得到解決

Java多執行緒 鎖物件

前面總結了多個執行緒訪問同乙個物件的同步方法以同步執行,多個執行緒訪問多個物件的同步方法則以非同步方式執行,那如果多個執行緒分別訪問乙個物件中同步方法和非同步方法會如何執行那?demo myobject類 包含了乙個同步方法和乙個非同步方法 public class myobject catch i...

多執行緒 鎖物件和條件物件

用reentrantlock保護 塊基本結構 public class bank finally 每個bank物件都有自己的reentrantlock物件。訪問不同的bank物件,會得到不同的鎖物件。鎖是可重入的,獲得鎖的執行緒可以重複獲得相同的鎖,呼叫其他使用相同鎖的方法,鎖用乙個持有計數來跟蹤對...

多執行緒 互斥物件和鎖

互斥物件的主要操作有兩個,即加鎖 lock 和解鎖 unlock 當乙個執行緒對互斥物件進行lock操作並成功獲得這個互斥物件的所有權,在此執行緒對此物件unlock前,其他執行緒對這個互斥物件的lock操作都會被阻塞。有些傾向需要對多個互斥物件進行加鎖,考慮下面的 std mutex mt1,mt...