セマフォのカウントの仕組みを理解するために、単純なバージョンを実装することにしました。現在の実装が実際に正しい実装であることを確認したかったのですが、明らかなことは何も見逃していません
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();
}
}
}