IllegalMonitorStateException on wait() call

后端 未结 10 1494
感动是毒
感动是毒 2020-11-22 11:37

I am using multi-threading in java for my program. I have run thread successfully but when I am using Thread.wait(), it is throwing java.lang.IllegalMonit

10条回答
  •  半阙折子戏
    2020-11-22 11:46

    Since you haven't posted code, we're kind of working in the dark. What are the details of the exception?

    Are you calling Thread.wait() from within the thread, or outside it?

    I ask this because according to the javadoc for IllegalMonitorStateException, it is:

    Thrown to indicate that a thread has attempted to wait on an object's monitor or to notify other threads waiting on an object's monitor without owning the specified monitor.

    To clarify this answer, this call to wait on a thread also throws IllegalMonitorStateException, despite being called from within a synchronized block:

    
         private static final class Lock { }
         private final Object lock = new Lock();
    
        @Test
        public void testRun() {
            ThreadWorker worker = new ThreadWorker();
            System.out.println ("Starting worker");
            worker.start();
            System.out.println ("Worker started - telling it to wait");
            try {
                synchronized (lock) {
                    worker.wait();
                }
            } catch (InterruptedException e1) {
                String msg = "InterruptedException: [" + e1.getLocalizedMessage() + "]";
                System.out.println (msg);
                e1.printStackTrace();
                System.out.flush();
            }
            System.out.println ("Worker done waiting, we're now waiting for it by joining");
            try {
                worker.join();
            } catch (InterruptedException ex) { }
    
        }
    

提交回复
热议问题