// is final so subclassing cannot upset if (...) wait() and notify()
// but notify() (and wait() too) are public methods so still risky;
// better to create a private object and do notify(), wait() inside it
public final class CountingSemaphore extends Semaphore {

   public CountingSemaphore() {super();}  // constructors

   public CountingSemaphore(int initial) {super(initial);}
}
