public
inte***ce
lock
即在不同方法中呼叫lock,獲得的都是物件鎖。
public
class conditiontest catch (interruptedexception e) finally
system.out.println(" after await");
}public
void
signal() finally }}
private
static
class mythreada extends thread
@override
public
void
run()
}public
static
void
main(string args) throws interruptedexception
}輸出結果:
await
signal
after await
1. getholdcount
- lock.getholdcount()
- 這個方法不是lock介面中定義的方法,在reentrantlock中定義。
- 查詢當前執行緒保持此鎖定的個數,及呼叫lock方法次數
2. 方法getqueuelength
- 返回正等待獲取鎖定執行緒的估計數。比如有5個執行緒,1個執行緒執行了await,呼叫這個返回的是4.說明有4個執行緒同時在等待lock的釋放。
3. getwaitqueuelenth(condition)
- 返回等待與此相關的給定條件的執行緒數。
4. hasqueuedthred(thread)
- 查詢指定執行緒是否正在等待鎖
5. haswaiters(condition)作用是查詢是否有執行緒正在等待與此鎖有關的條件。
6. isfair:判斷是不是公平鎖
7. isheldbycurrentthread:當前執行緒是否保持此鎖
8. islock,是否有任意執行緒保持
9. trylock()
reentranlock具有完全排他鎖,同乙個時間只有乙個執行緒可以訪問。
reentrantreadwritelock讀寫鎖類,包含兩個鎖共享鎖(讀操作相關鎖)和排它鎖(寫相關鎖)。即讀鎖之間不互斥,寫讀寫鎖互斥,寫鎖之間互斥。沒有執行緒寫時,都有個讀操作是獲取讀的。
讀讀共享示例:
public
class readwritelocktest catch (interruptedexception e) finally
system.out.println(" after read");}}
private
static
class mythreada extends thread
@override
public
void
run()
}public
static
void
main(string args) throws interruptedexception
}輸出結果:
read0
read0
after read
after read
寫寫互斥示例
public
class writelocktest catch (interruptedexception e) finally
system.out.println("after write");}}
private
static
class mythreada extends thread
@override
public
void
run()
}public
static
void
main(string args) throws interruptedexception
}輸出結果:
write0
after write
write0
after write
讀寫互斥示例
public
class readwritelocktest catch (interruptedexception e) finally
system.out.println("after read");
}public
void
write() catch (interruptedexception e) finally
system.out.println("after write");}}
private
static
class mythreada extends thread
@override
public
void
run()
}private
static
class mythreadb extends thread
@override
public
void
run()
}public
static
void
main(string args) throws interruptedexception
}輸出結果:
write0
after write
read1
after read
多執行緒 Lock
reentrantlock和synchronized區別 作用跟synchronized 鎖一樣 reentrantlock 底層是 cas 值,期望,預期 synchronized 底層鎖公升級 reentrantlock 可以trylock 嘗試鎖 a.如果在某時間段內獲取到鎖,就執行 b.如果...
C 多執行緒系列之多執行緒鎖lock和Monitor
目錄 lock 用於讀乙個引用型別進行加鎖,同一時刻內只有乙個執行緒能夠訪問此物件。lock 是語法糖,是通過 monitor 來實現的。lock 鎖定的物件,應該是szpcskvml靜態的引用型別 字串除外 實際上字串也可以作為鎖的物件使用,只是由於字串物件的特殊性,可能會造成不同位置的不同執行緒...
C 多執行緒Lock
一.為什麼要lock,lock了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...