H2O 生成

H2O 生成

下面这道题真的难到我了,看了解析后是用信号量机制去做了,看了半天看明白(平时没写过信号量)

H2O 生成_第1张图片

下面的信号量机制保证了O和H在资源获取不到时,去获取资源,在资源释放不掉时,就去释放资源

  • h.acquire(); // 获取一个H资源
  • o.release(); // 释放一个O资源
  • o.acquire(2); // 获取两个O资源(这里容易理解错,并不是获取两个O,这里是保证一次只能有一个进程执行O,看输出)
  • h.release(2); // 释放两个H资源

上面的所以四个,如果不满足,则会阻塞!(理解了这句话,就看明白下面的代码了)

class H2O {
    private Semaphore h = new Semaphore(2);
    private Semaphore o = new Semaphore(2);
    public H2O() {

    }

    public void hydrogen(Runnable releaseHydrogen) throws InterruptedException {
        h.acquire();
        // releaseHydrogen.run() outputs "H". Do not change or remove this line.
        releaseHydrogen.run();
        o.release();
    }

    public void oxygen(Runnable releaseOxygen) throws InterruptedException {
        o.acquire(2);
        releaseOxygen.run();
        h.release(2);
    }
}

 

 

 

 

你可能感兴趣的:(leetecode,多线程,H2O,生成)