Python «Событие» эквивалент в Java? - PullRequest
5 голосов
/ 25 июня 2009

Что ближе всего в Java (возможно, идиома) к threading.Event в Python?

Ответы [ 2 ]

7 голосов
/ 25 июня 2009

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

Или Condition.await() и Condition.signal() / Condition.signalAll() для Java 5 +.

Редактировать: Поскольку спецификация Python похожа, мы обычно ждем, что реализация 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();
        }
    }
}
0 голосов
/ 25 июня 2009

A связанная тема . Есть комментарий к принятому ответу, который предлагает семафор или Latch . Не та семантика, что и в описанной выше реализации, но удобная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...