多執行緒學習之七讀寫鎖

2022-09-06 06:09:07 字數 2682 閱讀 1570

read-write lock pattern【讀寫】

一:read-write lock pattern的參與者

--->讀寫鎖

--->資料(共享資源)

--->讀執行緒

--->寫執行緒

二read-write lock pattern模式什麼時候使用

--->

* 為了多線執行緒環境下保護資料安全,我們必須避免的衝突

* 乙個執行緒讀取,另乙個執行緒寫入的read-write conflick

* 乙個執行緒寫入,另乙個執行緒寫入的write-write conflick

* 乙個執行緒讀取,另乙個執行緒也在讀取不會產生衝突

* * 當執行緒想要獲取讀取鎖定時:

* -->已經有執行緒在執行寫入,則等待。不等待,則發生read-write conflick

* -->已經有執行緒在讀取,則不需要等待。不存在read-read conflick

* * 當執行緒想要獲取寫入鎖定時:

* -->已經有執行緒在執行寫入,則等待。不等待,則發生write-write conflick

* -->已經有執行緒在執行讀取,則等待。不等待,則發生read-write conflick

--->利用同時(讀取)不會引起資料衝突的特性,提高系統的效能

--->適合讀取操作繁重時

--->適合讀取操作比寫入操作繁重時

三:read-write lock pattern思考

--->

**階說明

--->

讀寫鎖

/***  

*/package

com.benxq.thread8;

/*** 讀寫鎖

* created by qucf on 2023年10月23日. */

public

class

readwritelock

readinteger++;

}//釋放讀取鎖的方法

public

synchronized

void

readunlock()

//獲取寫入鎖定的方法

public

synchronized

void writelock() throws

interruptedexception

} finally

//寫入執行緒+1

writeinteger++;

}//釋放寫入鎖

public

synchronized

void

writeunlock()

}

view code

資料類

/***  

*/package

com.benxq.thread8;

/*** 資料類

* 持有公共資料+改公共資料的讀寫鎖

* created by qucf on 2023年10月23日. */

public

class

data

}public

readwritelock getlock()

//讀取資料的方法

public string read() throws

interruptedexception

finally

}//寫入操作

public

void write(string a) throws

interruptedexception

finally

}//真正的寫操作

public

void

dowrite(string a)}}

view code

讀執行緒

/***  

*/package

com.benxq.thread8;

/*** 讀執行緒

* created by qucf on 2023年10月23日. */

public

class readthread implements

runnable

@override

public

void

run()

catch

(interruptedexception e) }}

}

view code

寫執行緒

/***  

*/package

com.benxq.thread8;

/*** 寫執行緒

* created by qucf on 2023年10月23日. */

public

class writethread implements

runnable

@override

public

void

run()

} catch

(interruptedexception e) }}

}

view code

主線程

/***  

*/package

com.benxq.thread8;

/*** created by qucf on 2023年10月23日. */

public

class

test

}

view code

多執行緒學習 讀寫鎖

讀寫鎖 reentrantreadwritelock 具有互斥排他效果,即同一時間只有乙個執行緒在執行鎖後面的任務,這種效率比較搞。讀鎖也稱為共享鎖,寫鎖也稱為排他鎖。多個讀鎖之間不互斥,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥。在沒有執行緒thread進行寫入操作時,進行讀取操作的多個執行緒都可以獲取讀鎖,...

多執行緒之讀寫鎖

之前沒真正使用讀寫鎖,看到別人對讀寫鎖的解釋總感覺一頭霧水。今天親自敲 實驗之後,才明了,原來如此。網上沒有一篇文章是能描述出自己理解的樣子,所以將自己的思路記下來。先提出疑問,邊自答邊找思路,有了思路,再回頭去執行一下 就清晰明了了。如果你急著想要一句話概括讀寫鎖,那我會告訴你 讀鎖是加在讀方法裡...

多執行緒 讀寫鎖模式

讀寫鎖 1.寫寫加鎖 2.讀寫加鎖 3.寫都加鎖 4.讀讀不加鎖 public class readwritelock this readingreaders 因為使用了while,所以,當while結束的時候,說明寫完成了.可以讀取資料了.finally public synchronized v...