Java中Python "Event" 的等价物是什么?
在Java中,最接近Python里threading.Event的东西是什么?也许可以说是一种用法或习惯。
2 个回答
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();
}
}
}