我猜想互斥锁(mutex)和信号量(semaphore)之间的显著区别在于:计数信号量支持多个最大访问,而互斥锁在同一时间只支持最多一个访问。
但是在以下实现时:
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()方法呢?
java.util.concurrent
中已经有Semaphore
和CountdownLatch
类了吗?还是你正在为作业重新实现这些东西? - skaffman