Java语言中最接近Python语言中的threading.Event的东西(可能是一种习惯用法)是什么?
发布于 2009-06-24 12:34:08
The Object.wait()
Object.notify()
。
或者用于Java 5+的Condition.await()
和Condition.signal()
。
编辑:因为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();
}
}
}
发布于 2009-06-24 13:30:39
一个related thread。在公认的答案上有一个评论,它建议使用Semaphore或Latch。与上述实现的语义不同,但很方便。
https://stackoverflow.com/questions/1040818
复制