1117. H2O 生成
https://leetcode-cn.com/problems/building-h2o/comments/
解题关键:
用两个信号量 一个信号量吞1个 一个信号量吞2个那么我们只需要让h的信号量一开始给他有两位 o的信号量有0位即可, 然后h线程每次开始则吞一个h的信号量 释放o一个信号量 则o线程则要吞两个o信号量 释放两个h信号量。
import java.util.concurrent.*;
class H2O {
private Semaphore a,b;
public H2O() {
a = new Semaphore(2);
b = new Semaphore(0);
}
public void hydrogen(Runnable releaseHydrogen) throws InterruptedException {
a.acquire();
releaseHydrogen.run();
b.release();
}
public void oxygen(Runnable releaseOxygen) throws InterruptedException {
b.acquire(2);
releaseOxygen.run();
a.release(2);
}
}