帮助java中的synchronized方法

时间:2009-12-31 10:52:50

标签: java multithreading concurrency

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

有我的代码:

//线程氧气的类 公共类Thread_O实现了Runnable {

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...");

}

}

//线程氢的类 公共类Thread_H实现了Runnable {

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 = new Object();

//在Oxygen的按钮中:

    Thread thread_O = new Thread(new Thread_O(object));
    thread_O.run();

//在氢气按钮中:

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您的代码在Thread_O类的方法run()的最后一行抛出异常。

您需要删除此行。

答案 2 :(得分:0)

您的程序在Thread_H和Thread_O run()方法中抛出异常。您已经为run()方法提供了实现,因此删除引发异常的行。删除这些行。

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

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