Reputation: 1289
void waitForSignal(){
Object ob =new Object();
synchronized (Thred.currentThread()) {
try {
ob.wait();
ob.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
This Methods Throws an IllegalMonitorStateException. Can some one explain why so.
Thanks in advance
Upvotes: 0
Views: 642
Reputation: 135992
If even you fixed your problem with IllegalMonitorException like
void waitForSignal() {
Object ob = new Object();
synchronized (ob) {
your code won't work. In your code each thread creates a new lock, invisible outside the method. No chance for other threads to notify waiting threads.
Upvotes: 0
Reputation: 213193
You should only invoke wait
on the object that you have acquired lock on.
In your code, you have acquried lock on Thread.currentThread()
, but you are invoking it on ob
, which will throw IllegalMonitorStateException
.
So, you should rather change your synchronized block to: -
synchronized (ob) {
}
Upvotes: 4
Reputation: 535
You want to synchronize on the object you are waiting:
synchronized (ob) {
try {
ob.wait();
ob.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Upvotes: 1