2009-06-24 11 views

Respuesta

7

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

O Condition.await() y Condition.signal()/Condition.signalAll() para Java 5+.

Editar: Debido a la especificación de pitón es similar la forma en que suelen esperar una implementación de Java se vería así:

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

No sugiera wait() y notify(). Alguien podría usarlos. –

+1

Gracias, iré con java.util.concurrent. Condición – shikhar

+0

Acabo de ver su edición con el ejemplo Implementación de eventos, ¡maravilloso! Muchas gracias. – shikhar

0

Un related thread. Hay un comentario sobre la respuesta aceptada que sugiere Semaphore o Latch. No es la misma semántica que la implementación anterior, pero es útil.

+1

Tenga en cuenta que el comportamiento operativo del semáforo difiere del objeto de evento que solicitó. – akarnokd

+0

sí, solo noté que :-) – shikhar