Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python "Event" equivalent in Java?

What's the closest thing in Java (perhaps an idiom) to threading.Event in Python?

like image 498
shikhar Avatar asked Jun 24 '09 20:06

shikhar


1 Answers

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

Or Condition.await() and Condition.signal()/Condition.signalAll() for Java 5+.

Edit: Because the python specification is similar how we usually wait a Java implementation would look like this:

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();
        }
    }
}
like image 132
akarnokd Avatar answered Oct 16 '22 02:10

akarnokd