【问题标题】:Reentrant Read Write lock on particular value特定值的可重入读写锁
【发布时间】:2019-03-21 06:32:48
【问题描述】:

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

说 Header1=App1

App1 的值不断变化。

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

。然而,这些值可以以任何顺序继续出现。 我需要处理竞争条件,如果 App1 有多个请求,我会获取

可重入读写锁

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

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

【问题讨论】:

  • 听起来你想要一个 table 锁。 (例如,java.util.Map<String, ReentrantLock>)。

标签: java multithreading concurrency locking reentrantlock


【解决方案1】:

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

ConcurrentMap<String, ReentrantLock> locks = ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多