package pkg_1; public class ExpOnWaitMethod extends Thread { static Double x = new Double(20); public static void main(String[] args) { ExpOnWaitMethod T1 = new ExpOnWaitMethod(); ExpOnWaitMethod T2 = new ExpOnWaitMethod(); T1.start(); T2.start(); } public void run() { Mag mag = new Mag(); synchronized (x) { try { for (int i = 1; i < 10; i++) { mag.nop(Thread.currentThread()); x = i * 2.0; } } catch (InterruptedException e) { e.printStackTrace(); } } } } class Mag { char ccc = 'A'; public void nop(Thread thr) throws InterruptedException { System.out.print(ccc + " "); ccc++; if (thr.getState().toString().equalsIgnoreCase("runnable")) Thread.currentThread().wait(); //thr.notify(); } }
Advertisement
Answer
You need to hold the lock on the object you want to wait
on (you can only call it within a synchronized
block).
Also, calling wait
on a Thread
is very unusual and probably not what you want.
I am not sure what you are trying to do, but could you be confusing wait
with sleep
?
If you want to wait for another thread to finish, that would be anotherThread.join()
.