[英]Reentrant Read Write lock on particular value
我的應用程序收到很多傳入的HTTP請求。 每個請求的標頭中都有一個鍵值對。
說Header1 = App1
值App1不斷變化。
接下來是App2,App3等
。 但是,這些值可以繼續以任何順序出現。 我需要處理競態條件,如果出現與App1的多個請求,我將獲得
的ReentrantReadWriteLock
在App1上。 同時,如果我收到對App2的請求,我將獲得App2的ReentrantReadWriteLock。 兩個鎖都必須互斥,否則我將遇到性能瓶頸,除非執行App1邏輯,否則將不會執行App2。
我想做的是,如果有多個對App1的請求到來,那么他們必須等待。 同時,如果收到App2的請求,它將與當前App1的請求並行執行。 本質上同步唯一值。 我實際上是一無所知。 贊賞指導。 PS我無法使用同步,因為它會導致性能瓶頸
您可以使用ConcurrentMap
將請求密鑰映射到鎖,例如:
ConcurrentMap<String, ReentrantLock> locks = ...
ReentrantLock lock = locks.computeIfAbsent(key, k -> new ReentrantLock());
lock.lock();
// do work
lock.unlock();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.