Co jest najbardziej podobną rzeczą w Javie (być może idiomem) do threading.Event w Pythonie?Odpowiednik "Wydarzenie" Pythona w języku Java?
5
A
Odpowiedz
7
The Object.wait()
Object.notify()
/Object.notifyAll()
.
Lub Condition.await()
i Condition.signal()
/Condition.signalAll()
dla języka Java 5+.
Edit: Ponieważ specyfikacja pyton jest podobna jak zwykle czekać implementacja Javy będzie wyglądać następująco:
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
related thread. Istnieje komentarz dotyczący zaakceptowanej odpowiedzi, która sugeruje, że Semaphore lub Latch. Nie ta sama semantyka co powyższa implementacja, ale przydatna.
W rezultacie otrzymałem: http://github.com/shikhar/sshj/tree/master/src/main/java/net/schmizz/concurrent/ – shikhar