McC*_*Coy 5 java concurrency semaphore locking
我有一个临界区,我需要控制只有那些具有给定属性值的线程才能同时进入。
例如:我有 Thread#1 处理产品,Thread#2 也处理产品,Thread#3 处理服务
现在:
T1先来,进入临界区,使产品得到处理
T2想进入,但是因为还有一个产品正在加工,所以必须等待
T3排在最后,它可以进入,因为它需要一个服务(而不是一个产品)来处理
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();
}
}
Run Code Online (Sandbox Code Playgroud)
tryEnter(int)via Semaphore#tryAcquire()。| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |