Java併發 讀寫鎖ReadWriteLock

2021-09-19 20:36:40 字數 1627 閱讀 6674

讀寫鎖是為了幫助解決多執行緒中讀操作和寫操作分離而設計的。想象一下,如果在系統中,讀操作遠遠大於寫操作,而每一次寫操作進行時,別的寫操作也要等待,這樣對系統的效能會有很大的影響。readwritelock是jdk5開始提供的讀寫分離鎖。

讀寫鎖允許多個執行緒同時讀,是的讀執行緒可以真正的並行。但是考慮到資料的完整性,讀操作和寫操作是一定要互斥的。看一下讀寫鎖的訪問約束情況:

read

write

read

unblock

block

write

block

block

來看一下具體的使用例子

1. 獲取讀寫鎖

通過reentrantreadwritelock這個類的readlock()方法和writelock()方法分別拿到讀鎖和寫鎖

private

static lock lock =

newreentrantlock()

;//普通的可重入鎖

private

static reentrantreadwritelock readwritelock =

newreentrantreadwritelock()

;//讀寫分離鎖

private

static lock readlock = readwritelock.

readlock()

;private

static lock writelock = readwritelock.

writelock()

;

2. 為讀操作和寫操作加鎖
public object handleread

(lock lock)

throws interruptedexception

finally

}public

void

handlewrite

(lock lock,

int value)

throws interruptedexception

finally

}

3. 測試**
public

static

void

main

(string[

] args)

catch

(interruptedexception e)}}

; runnable writerunnable =

newrunnable()

catch

(interruptedexception e)}}

;new

thread

(writerunnable)

.start()

;for

(int i =

0; i <

10; i++

)new

thread

(writerunnable)

.start()

;}

執行**之後發現使用讀寫鎖的時候,會有多個讀操作併發執行,然後等待一秒執行寫操作。而使用普通的可重入鎖,則不管讀操作還是寫操作,都要等待一秒才能繼續執行。

the end.

Java併發之讀 寫鎖

讀取 沒有執行緒正在做寫操作且沒有執行緒請求寫操作 寫入 沒有執行緒正在做寫操作 這裡假設寫操作的優先順序比讀操作高 當乙個執行緒已經擁有寫鎖,才允許寫鎖重入 public class readwritelock writerequest writeaccesses writingthread ca...

併發 讀寫鎖初探

兩個執行緒同時讀取同乙個共享資源沒有任何問題 如果乙個執行緒對共享資源進行寫操作,此時就不能有其他執行緒對共享資源進行讀寫 讀操作觸發條件 沒有執行緒正在執行寫操作 沒有執行緒在等待執行寫操作 寫操作觸發條件 沒有執行緒正在執行讀寫操作 readwritelockl類中通過讀鎖 寫鎖以兩個鎖的狀態控...

併發 讀寫鎖初探

public class readwritelock readers public synchronized void unlockread public synchronized void lockwrite throws interruptedexception writerequests wr...