重入读写锁定特定值

时间:2018-10-16 16:44:25

标签: java multithreading concurrency locking reentrantlock

我的应用程序收到很多传入的HTTP请求。每个请求的标头中都有一个键值对。

  

说标题1 =应用1

值App1不断变化。

  

所以接下来可以是App2,App3之类的

。但是,这些值可以继续以任何顺序出现。 我需要处理竞态条件,如果App1出现多个请求,我将获得

  

ReentrantReadWriteLock

在App1上。同时,如果我收到对App2的请求,我将获得App2的ReentrantReadWriteLock。两个锁都必须互斥,否则我将遇到性能瓶颈,除非执行App1逻辑,否则将不会执行App2。

我想做的是,如果有多个对App1的请求到来,那么他们必须等待。同时,如果收到App2的请求,它将与当前App1的请求并行执行。本质上同步唯一值。 我实际上是一无所知。赞赏指导。 附言我无法使用同步,因为它会导致性能瓶颈

1 个答案:

答案 0 :(得分:0)

您可以使用ConcurrentMap将请求密钥映射到锁,例如:

ConcurrentMap<String, ReentrantLock> locks = ...

ReentrantLock lock = locks.computeIfAbsent(key, k -> new ReentrantLock());
lock.lock();
// do work
lock.unlock();