Эх сурвалжийг харах

#feat:leetcode p1117题题解

yangyi 2 долоо хоног өмнө
parent
commit
513a64f69f

+ 36 - 0
src/leetcode/p1117/H2O.java

@@ -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);
+    }
+}