
多线程 wait 方法为什么会报错?
在多线程编程中,使用 wait() 方法来暂停当前线程的执行,直到收到其他线程的通知。然而,如果你在释放锁之前修改了锁对象,就会遇到 illegalmonitorstateexception 错误。
考虑以下代码:
AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。
// 线程打印完毕后,设置下一个要打印的线程标识,并唤醒其他线程
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)要解决此错误,可以使用另一个锁对象实现同步,在释放锁之前不要修改锁对象。

















