Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到'IllegalMonitorStateException'异常_Java_Multithreading - Fatal编程技术网

Java 为什么我会得到'IllegalMonitorStateException'异常

Java 为什么我会得到'IllegalMonitorStateException'异常,java,multithreading,Java,Multithreading,我有以下Java代码: public class Lean extends Thread { public static void main(String args[]) throws InterruptedException { Lean lean = new Lean(); System.out.println("starting"); lean.start(); lean.join();

我有以下Java代码:

public class Lean extends Thread   
{
    public static void main(String args[]) throws InterruptedException  
    {
        Lean lean = new Lean();
        System.out.println("starting");
        lean.start();
        lean.join();
        System.out.println("end");

    }

    public void run()
    {
        try
        {
            System.out.println("waiting");
            wait(20000);
        } 
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        finally
        {
            System.out.println("waiting finished");
        }
    }
}
输出是(不断变化——有时我甚至看不到打印的“结束”)

问题:

  • 为什么我会得到
    IllegalMonitorStateException
    exception

  • 为什么thread.join不能按预期的方式工作?(我有时看不到打印“结束”)


  • 调用需要同步的操作而不保持监视器锁时,将引发非法监视器状态异常<代码>等待需要在同步块中调用

    这个

    基本上你需要做:

    synchronized(this) {
        wait();
    }
    

    这与中断机制无关。

    IllegalMonitorStateException
    在不保持监视器锁的情况下调用需要同步的操作时引发<代码>等待需要在同步块中调用

    这个

    基本上你需要做:

    synchronized(this) {
        wait();
    }
    

    这与中断机制无关。

    1。没有人打断你的思路。你根据什么证据得出结论?我收到的例外情况?“java.lang.IllegalMonitorStateException”建议:去阅读
    Object#wait()
    的Javadoc,也许你会得到一些线索。
    IllegalMonitorStateException
    与线程中断有什么关系?也许你只是不区分“中断”和“中断”,但后者是该机制的正式名称,不包含在你的代码中。我编辑了我的问题,请检查。谢谢。没有人打断你的思路。你根据什么证据得出结论?我收到的例外情况?“java.lang.IllegalMonitorStateException”建议:去阅读
    Object#wait()
    的Javadoc,也许你会得到一些线索。
    IllegalMonitorStateException
    与线程中断有什么关系?也许你只是不区分“中断”和“中断”,但后者是该机制的正式名称,不包含在你的代码中。我编辑了我的问题,请检查。谢谢,我觉得自己像个傻瓜。我怎么能忘记这件事。我将删除我的问题。当然,我会接受你的回答。哦,我觉得自己像个傻瓜。我怎么能忘记这件事。我将删除我的问题。当然,我会接受你的回答。