gpt4 book ai didi

java - 在 Java 中使用 Semaphore 和 Monitor 出现 IllegalMonitorException

转载 作者:行者123 更新时间:2023-12-01 16:41:29 25 4
gpt4 key购买 nike

我有一个关于“操作系统”的项目。我需要用java编写2个程序...

  1. 编写一个用氧气和氢气两种方法生产水的程序。方法氧气产生一种氧气,方法氢气产生一种氢气。当2个氢和1个氧存在时生成H2O。我必须用信号量和线程来编写这个。

  2. 用监视器和同步写出上述问题。

我为此编写了一些代码,但它给出了非法监视器异常......请帮我改正...

这是我的代码:

// class for implement Thread for oxygen
public class Thread_O implements Runnable {

public void run() {

thread t = new thread();

try {
t.oxygen();
} catch (InterruptedException ex) {
Logger logger = Logger.getLogger(Thread_O.class.getName());
logger.log(Level.SEVERE, null, ex);
}
}
}


// class for implement Thread for Hydrogen
public class Thread_H implements Runnable {

public void run() {

thread t = new thread();

try {
t.Hydrogen();
} catch (InterruptedException ex) {
Logger logger = Logger.getLogger(Thread_H.class.getName());
logger.log(Level.SEVERE, null, ex);
}
}
}

//class for method Oxygen and Hydrogen
public class thread {

Semaphore O = new Semaphore(0, true);
Semaphore H = new Semaphore(0, true);
Semaphore H2O = new Semaphore(0, true);
Semaphore safe = new Semaphore(1, true);

public void oxygen() throws InterruptedException {

safe.wait();

H.wait();
H.wait();

H2O.release();
H2O.release();

Safe.release();
// System.out.println("O2...!");
}

public void Hydrogen() throws InterruptedException {

H.release();
H2O.wait();

// System.out.println("H2...!");
}
}

以及氧气按钮的作用:

    Thread th = new Thread(new Thread_O());
th.start();

最佳答案

我不会为您解码您的作业,但是当您尝试在没有同步的情况下对对象进行wait()时,会抛出IllegalMonitorException。因此要等待一个名为 list 的对象:

synchronized (list) {
try {
list.wait();
} catch(Throwable t) {
t.printStackTrace();
}
}

关于java - 在 Java 中使用 Semaphore 和 Monitor 出现 IllegalMonitorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1978734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com