多執行緒系列九 lock

2021-08-14 03:24:57 字數 3099 閱讀 3695

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了什麼?當我們使用 執行緒的時候,效率最高的方式當然是 非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要 同步機制 了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作...