2009-06-24 119 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