啥也不说了,我爱死信号量了~
class H2O {
private static final Semaphore h = new Semaphore(2);
private static final Semaphore o = new Semaphore(0);
private volatile boolean flag = false;
public H2O() {
}
public void hydrogen(Runnable releaseHydrogen) throws InterruptedException {
h.acquire();
if(flag == false){
flag = true;
}else{
flag = false;
o.release();
}
// releaseHydrogen.run() outputs "H". Do not change or remove this line.
releaseHydrogen.run();
}
public void oxygen(Runnable releaseOxygen) throws InterruptedException {
o.acquire();
// releaseOxygen.run() outputs "O". Do not change or remove this line.
releaseOxygen.run();
h.release(2);
}
}