gpt4 book ai didi

Java并发控制多把锁

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:48 24 4
gpt4 key购买 nike

我有一个临界区,我需要控制只有那些具有给定属性值的线程才能同时进入。

例如:我有线程#1 处理产品,线程#2 也处理产品,线程#3 处理服务

现在:

  1. T1先到,进入临界区,从而处理乘积

  2. T2想进入,但是由于还有一个产品正在处理,所以必须等待

  3. T3 排在最后,它可以进入,因为它需要处理服务(而不是产品)

  4. T1 出去了,现在 T2 可以进来了

我觉得它看起来很简单,但我找不到符合要求的东西。我的问题是,我怎样才能做到这一点?任何对此的任何信息来源的引用将不胜感激

非常感谢您

最佳答案

这个怎么样:

private ConcurrentMap<Integer, Semaphore> semaphores = new ConcurrentHashMap<>();

public void enter(int id) {
Semaphore s = semaphores.computeIfAbsent(id, key -> new Semaphore(1));

try {
s.acquire();
// Critical section.
} catch (InterruptedException e) {
// Exception handling.
} finally {
s.release();
}
}
  • 散列映射保证快速访问并且可以动态增长。此外,您还可以将对象用作键。
  • 如果您在编译时知道 ID 的数量,您还可以使用不可修改或不可变的映射并预填充它。
  • 信号量也可以调整:为不同的ID设置不同的许可数和公平性保证。
  • 包装类可以提供额外的方法,例如通过 Semaphore#tryAcquire() 的非阻塞 tryEnter(int)

关于Java并发控制多把锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com