|
|
@@ -0,0 +1,36 @@
|
|
|
+package leetcode.p1117;
|
|
|
+
|
|
|
+import java.util.concurrent.Semaphore;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ProjectName: LeetCode
|
|
|
+ * @FileName: H2O
|
|
|
+ * @Author: 杨逸
|
|
|
+ * @Data:2026/3/27 11:06
|
|
|
+ * @Description: https://leetcode.cn/problems/building-h2o/description/
|
|
|
+ * 1117. H2O 生成
|
|
|
+ */
|
|
|
+public class H2O {
|
|
|
+ private final Semaphore semaphoreH;
|
|
|
+ private final Semaphore semaphoreO;
|
|
|
+ public H2O() {
|
|
|
+ semaphoreH = new Semaphore(2);
|
|
|
+ semaphoreO = new Semaphore(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void hydrogen(Runnable releaseHydrogen) throws InterruptedException {
|
|
|
+ semaphoreH.acquire();
|
|
|
+ // releaseHydrogen.run() outputs "H". Do not change or remove this line.
|
|
|
+ releaseHydrogen.run();
|
|
|
+ if (semaphoreH.availablePermits() == 0) {
|
|
|
+ semaphoreO.release();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void oxygen(Runnable releaseOxygen) throws InterruptedException {
|
|
|
+ semaphoreO.acquire();
|
|
|
+ // releaseOxygen.run() outputs "O". Do not change or remove this line.
|
|
|
+ releaseOxygen.run();
|
|
|
+ semaphoreH.release(2);
|
|
|
+ }
|
|
|
+}
|