我怀疑互斥量和信号量之间的显着区别在于计数信号量支持超过一次的最大访问,因为互斥量一次最多只支持一次访问。
但是在执行如下操作时;
public class countingSemaphore{
private static final int _MOSTTABLES = 3; // whatever maximum number
private static int availtable = _MOSTTABLES;
public synchronized static void Wait(){
while(availtable==0){
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
availtable--;
}
public synchronized static void Signal(){
while(availtable==_MOSTTABLES){
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
availtable++;
}
}
问题是对象的非静态 wait() 方法的调用。但是,我必须对类而不是对象实例应用同步,因为访问是在多个实例之间共享的。
如何解决 wait() 错误?我们在 java 中是否有另一种方法,或者我们必须自己实现 wait()?