如何在main方法中调用wait()方法?如果我使用它,那么它将给出java.lang.IllegalMonitorStateException

时间:2015-08-19 07:00:21

标签: java

我收到错误:

    package main_test;
    public class Main {
    public static void main(String[] args) throws InterruptedException
    {
        Main m = new Main();
        System.out.println("Main Started");
            m.wait();
        System.out.println("Main Terminated");  
    }
}

3 个答案:

答案 0 :(得分:2)

您必须首先获得锁定,然后才能呼叫等待。尝试这样的事情:

  public static void main(String[] args) throws InterruptedException {
    Main m = new Main();
    System.out.println("Main Started");
    synchronized (m) {
      m.wait();
    }
    System.out.println("Main Terminated");
  }

但现在程序不会终止 - 显然。其他一些线程需要在您调用的对象notify()上调用wait()。 (这就是使用局部变量的一个坏主意,但这仅仅是一个例子......)

有关详细信息,请参阅java tutorial

答案 1 :(得分:0)

public static void main(String[] args) throws InterruptedException {

        Main m = new Main();
        System.out.println("Main Started");
        synchronized (m) {
            m.wait();
        }

        System.out.println("Main Terminated");
    }

程序不会终止!!

答案 2 :(得分:0)

您必须通过使特定块或方法同步来显式获取监视器。 wait()释放执行线程持有的锁,notify()通知其他线程执行。

示例:

Object lock= new Object();
synchronized(lock){
// write your code here. You may use wait() or notify() as per your requirement.
    wait(1000);
    notify();
}

或者您可以使用同步方法:

public synchronized void putMessage(){
// write your code
wait(1000);
notify();
// write your code
}