Я подозреваю, что существенное различие между мьютексом и семафором состоит в том, что счетный семафор поддерживает максимальный доступ больше, чем один, поскольку мьютекст поддерживает не более одного доступа одновременно.
Но при выполнении реализации следует:
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 () сами?