Hello! 欢迎来到小浪资源网!


多线程中wait方法抛出IllegalMonitorStateException错误的原因是什么?


多线程中wait方法抛出IllegalMonitorStateException错误的原因是什么?

线程 wait 方法为什么会报错?

线程编程中,使用 wait() 方法来暂停当前线程的执行,直到收到其他线程的通知。然而,如果你在释放锁之前修改了锁对象,就会遇到 illegalmonitorstateexception 错误。

考虑以下代码:

// 线程打印完毕后,设置下一个要打印的线程标识,并唤醒其他线程 if (current_thread.equals("a")) {     current_thread = "b"; } else if (current_thread.equals("b")) {     current_thread = "c"; } else if (current_thread.equals("c")) {     current_thread = "a"; }

在这个代码段中,使用了一个 volatile修饰的字符串 current_thread 作为锁对象。但在线程释放锁之前,却修改了锁的引用。这样会导致以下错误:

java.lang.IllegalMonitorStateException     at java.lang.Object.wait(Native Method)     at java.lang.Object.wait(Object.java:502)     at 并发编程.work2.Test$PrintThreadName.run(Test.java:42)

要解决此错误,可以使用另一个锁对象实现同步,在释放锁之前不要修改锁对象。

相关阅读