I am trying to learn Multi threading and for practice, I am trying to print odd & even number using two thread. I have created an object which will act as a lock for the both the threads. When I try to execute it throws java.lang.IllegalMonitorStateException.
class EVENODDimpl implements Runnable { int num; int temp = 0; Object lock = new Object(); public EVENODDimpl( int num) { this.num = num; } public void run() { try { synchronized (lock) { while(temp<num) { temp++; System.out.println(Thread.currentThread().getName()+" "+temp); this.notify(); this.wait(); } } } catch (InterruptedException e) { e.printStackTrace(); } } } Main Method:
public class EVENODD { public static void main(String[] args) { int i = 10; EVENODDimpl ei = new EVENODDimpl(i); Thread t1 = new Thread( ei,"EvenThread"); Thread t2 = new Thread( ei,"OddThread"); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } } }
notifyandwaiton a different one.