java中同步方法的帮助

java中同步方法的帮助,java,multithreading,concurrency,Java,Multithreading,Concurrency,我用java编写了一个程序,模拟生产用水的同步(氧气等待氢气可用),但它给出了“意外的操作例外”,并且没有工作。。。 请帮帮我 以下是我的代码: //螺纹氧气等级 公共类线程实现可运行{ Object object; public Thread_O(Object o) { object = o; } public void run() { try { oxygen(); } catch (InterruptedException ex) {

我用java编写了一个程序,模拟生产用水的同步(氧气等待氢气可用),但它给出了“意外的操作例外”,并且没有工作。。。 请帮帮我

以下是我的代码:

//螺纹氧气等级 公共类线程实现可运行{

Object object;

public Thread_O(Object o) {

    object = o;
}

public void run() {
    try {

        oxygen();

    } catch (InterruptedException ex) {
        Logger.getLogger(Thread_O.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new UnsupportedOperationException("Not supported yet.");
}

public void oxygen() throws InterruptedException {

    System.out.println("One O2 created...");

    synchronized (object) {

        object.wait();
        object.wait();
    }

    System.out.println("**** H2O created...");

}
Object object;

public Thread_H(Object o) {

    object = o;
}

public void run() {
    try {

        Hydrogen();

    } catch (InterruptedException ex) {
        Logger.getLogger(Thread_H.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new UnsupportedOperationException("Not supported yet.");
}

public void Hydrogen() throws InterruptedException {

    System.out.println("One H2 created...");

    synchronized (object) {

        object.notifyAll();
    }
}
}

//螺纹氢等级 公共类线程实现可运行{

Object object;

public Thread_O(Object o) {

    object = o;
}

public void run() {
    try {

        oxygen();

    } catch (InterruptedException ex) {
        Logger.getLogger(Thread_O.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new UnsupportedOperationException("Not supported yet.");
}

public void oxygen() throws InterruptedException {

    System.out.println("One O2 created...");

    synchronized (object) {

        object.wait();
        object.wait();
    }

    System.out.println("**** H2O created...");

}
Object object;

public Thread_H(Object o) {

    object = o;
}

public void run() {
    try {

        Hydrogen();

    } catch (InterruptedException ex) {
        Logger.getLogger(Thread_H.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new UnsupportedOperationException("Not supported yet.");
}

public void Hydrogen() throws InterruptedException {

    System.out.println("One H2 created...");

    synchronized (object) {

        object.notifyAll();
    }
}
}

//在主要课程中,我们有:

对象=新对象()

//在氧气按钮中:

    Thread thread_O = new Thread(new Thread_O(object));
    thread_O.run();
//在氢气按钮中:

    Thread thread_H = new Thread(new Thread_H(object));
    thread_H.run();

您的代码在类Thread\u O中方法run()的最后一行抛出异常


您需要删除这一行。

您的代码在类Thread\O中方法run()的最后一行抛出异常


您需要删除这一行。

顺便说一下,线程从方法
start()
no
run()
开始。如果调用
run()
,则执行该方法,但在新线程中的当前线程中没有。

顺便说一句,线程从方法
start()
no
run()
开始。如果调用
run()
,则执行该方法,但在当前线程中不执行新线程。

您的程序将在thread\H和thread\O run()方法中引发异常。您已经为run()方法提供了实现,因此请删除引发异常的行。删除这些行

throw new UnsupportedOperationException("Not supported yet.");

@Gaim是正确的,您需要使用start()开始执行线程。

您的程序正在Thread\H和Thread\O run()方法中引发异常。您已经为run()方法提供了实现,因此请删除引发异常的行。删除这些行

throw new UnsupportedOperationException("Not supported yet.");

@Gaim是正确的,您需要使用start()开始执行线程。

我知道,这只是提示。我认为你的问题是在捕获后不抛出异常,所以你总是抛出异常。但这是别人写的,所以我不想重复。我知道,这只是一个提示。我认为你的问题是在捕获后不抛出异常,所以你总是抛出异常。但这是别人写的,所以我不想重复。重复?哇,三个重复的线程,那个线程被关闭了,因为它是另一个线程的重复?哇,三个重复的线程,这一个被关闭了,因为它是另一个的重复