[英]How can I avoid unnecessary blocking in a multithreaded program?
給定2個方法methodB()
methodA()
和methodB()
,有沒有辦法使它們同步,從而使methodA()
不與其自身同步? 也就是說,許多線程可以同時執行methodA()
。
methodA()
應該阻塞,直到methodB()
未運行。 methodB()
應被阻塞,直到既不methodB()
或methodA()
正在運行。 您可以使用ReentrantReadWriteLock。
在methodA上鎖定readLock,在methodB上鎖定writeLock。 這將允許通過多個線程調用methodA,但不允許同時調用methodA和methodB(或methodB和methodB)。
更多背景信息:ReadLock允許並行讀取。 WriteLock是排他性的,不允許再進行讀取或寫入。 通常,如果有一些線程正在讀取並且某些線程要寫入,則將進一步的讀取請求排隊,直到寫入線程完成該工作為止。 這稱為公平/不公平算法,必要時可以在構造函數中進行配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.