2009-06-24 136 views

回答

7

Object.wait()Object.notify()/Object.notifyAll()

Condition.await()Condition.signal()/Condition.signalAll()適用於Java 5+。

編輯:因爲蟒蛇規格類似於我們平時怎麼等待的Java實現應該是這樣的:

class Event { 
    Lock lock = new ReentrantLock(); 
    Condition cond = lock.newCondition(); 
    boolean flag; 
    public void doWait() throws InterruptedException { 
     lock.lock(); 
     try { 
      while (!flag) { 
       cond.await(); 
      } 
     } finally { 
      lock.unlock(); 
     } 
    } 
    public void doWait(float seconds) throws InterruptedException { 
     lock.lock(); 
     try { 
      while (!flag) { 
       cond.await((int)(seconds * 1000), TimeUnit.MILLISECONDS); 
      } 
     } finally { 
      lock.unlock(); 
     } 
    } 
    public boolean isSet() { 
     lock.lock(); 
     try { 
      return flag; 
     } finally { 
      lock.unlock(); 
     } 
    } 
    public void set() { 
     lock.lock(); 
     try { 
      flag = true; 
      cond.signalAll(); 
     } finally { 
      lock.unlock(); 
     } 
    } 
    public void clear() { 
     lock.lock(); 
     try { 
      flag = false; 
      cond.signalAll(); 
     } finally { 
      lock.unlock(); 
     } 
    } 
} 
+8

請不要建議wait()和notify()。有人可能會使用它們。 – 2009-06-24 20:37:53

+1

謝謝,我將與java.util.concurrent.Condition一起去 – shikhar 2009-06-24 20:47:26