为了理解计数信号量的工作,我决定实现一个简单的版本。 我想验证我的当前实现实际上是在一个正确的执行,我还没有错过什么明显简单的计数信号灯
public class CountingSemaphore {
private int limit;
public CountingSemaphore(int limit) {
this.limit = limit;
}
public synchronized void acquire() {
try {
if (limit == 0)
wait();
limit--;
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void release() {
try {
if(limit == 0)
notifyAll();
limit++;
}catch(Exception e) {
e.printStackTrace();
}
}
}
+1:我看到了虚假唤醒问题,但错过了明显的逻辑问题。咄! –