Java中Python "Event" 的等价物是什么?

8 投票
2 回答
1616 浏览
提问于 2025-04-15 12:28

在Java中,最接近Python里threading.Event的东西是什么?也许可以说是一种用法或习惯。

2 个回答

0

这是一个相关的线程讨论。在被接受的答案下,有个评论提到可以使用信号量或者倒计时闩锁。虽然它们的用法和上面提到的实现不完全一样,但还是很有用的。

9

Object.wait()Object.notify()Object.notifyAll() 是 Java 中用来处理线程之间的等待和通知的工具。

另外,从 Java 5 开始,还有 Condition.await()Condition.signal()Condition.signalAll() 这些方法可以使用。

补充:因为 Python 的规范和 Java 的实现方式类似,所以我们通常会这样等待,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();
        }
    }
}

撰写回答