我懷疑互斥量和信號量之間的顯着差異在於計數信號量支持最大訪問次數不止一次,因爲mutext一次最多隻支持一次訪問。使用java實現計數信號量
但是在執行時如下;
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 2010-01-25 23:24:34
最有可能的功課,除非你是在一個受限制的ENV它不允許併發的東西做Java,並有實現它自己... – Chii 2010-01-26 04:14:15