我的应用程序收到很多传入的HTTP请求。每个请求的标头中都有一个键值对。
说标题1 =应用1
值App1不断变化。
所以接下来可以是App2,App3之类的
。但是,这些值可以继续以任何顺序出现。 我需要处理竞态条件,如果App1出现多个请求,我将获得
ReentrantReadWriteLock
在App1上。同时,如果我收到对App2的请求,我将获得App2的ReentrantReadWriteLock。两个锁都必须互斥,否则我将遇到性能瓶颈,除非执行App1逻辑,否则将不会执行App2。
我想做的是,如果有多个对App1的请求到来,那么他们必须等待。同时,如果收到App2的请求,它将与当前App1的请求并行执行。本质上同步唯一值。 我实际上是一无所知。赞赏指导。 附言我无法使用同步,因为它会导致性能瓶颈
答案 0 :(得分:0)
您可以使用ConcurrentMap
将请求密钥映射到锁,例如:
ConcurrentMap<String, ReentrantLock> locks = ...
ReentrantLock lock = locks.computeIfAbsent(key, k -> new ReentrantLock());
lock.lock();
// do work
lock.unlock();