2009-06-24 3 views

Odpowiedz

7

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

Lub Condition.await() i Condition.signal()/Condition.signalAll() dla języka Java 5+.

Edit: Ponieważ specyfikacja pyton jest podobna jak zwykle czekać implementacja Javy będzie wyglądać następująco:

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

Nie sugeruj wait() i notify(). Ktoś może z nich skorzystać. –

+1

Dzięki, pójdę z java.util.concurrent.Condition – shikhar

+0

Po prostu zobaczyłem twoją edycję na przykładzie implementacji zdarzeń, cudownie! Wielkie dzięki. – shikhar

0

related thread. Istnieje komentarz dotyczący zaakceptowanej odpowiedzi, która sugeruje, że Semaphore lub Latch. Nie ta sama semantyka co powyższa implementacja, ale przydatna.

+1

Należy zauważyć, że zachowanie operacyjne semaforu różni się od obiektu zdarzenia, o który prosiłeś. – akarnokd

+0

tak, tylko zauważyłem, że :-) – shikhar