本文鏈接:https://blog.csdn.net/lr222584/article/details/54572676
出現(xiàn)java.lang.IllegalMonitorStateException錯(cuò)誤,由以下情況導(dǎo)致:
1>當(dāng)前線程不含有當(dāng)前對象的鎖資源的時(shí)候,調(diào)用obj.wait()方法;
2>當(dāng)前線程不含有當(dāng)前對象的鎖資源的時(shí)候,調(diào)用obj.notify()方法。
3>當(dāng)前線程不含有當(dāng)前對象的鎖資源的時(shí)候,調(diào)用obj.notifyAll()方法。
例子:
public class ThreadTest {
class ThreadTest1 extends Thread{
String a;
public ThreadTest1(String a){
this.a=a;
}
public void run(){
try {
a.wait();
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args){
String a="11";
ThreadTest test = new ThreadTest();
ThreadTest1 test1 = test.new ThreadTest1(a);
test1.start();
}
}
以上程序運(yùn)行后會(huì)出現(xiàn)錯(cuò)誤:
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at ThreadTest$ThreadTest1.run(ThreadTest.java:11)
解決辦法:
public class ThreadTest {
class ThreadTest1 extends Thread{
String a;
public ThreadTest1(String a){
this.a=a;
}
public void run(){
try {
synchronized (a) {//在執(zhí)行a.wait()前,先讓當(dāng)前線程獲取a的鎖
a.wait();
}} catch (InterruptedException e) {}}}public static void main(String[] args){String a="11";ThreadTest test = new ThreadTest();ThreadTest1 test1 = test.new ThreadTest1(a);test1.start();}}
修改后便可以順利運(yùn)行
————————————————
版權(quán)聲明:本文為CSDN博主「lr222584」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lr222584/article/details/54572676