class MyThread extends Thread{
boolean waiting= true;
boolean ready= false;
public void run() {
String thrdName = Thread.currentThread().getName();
System.out.println(thrdName + " starting.");
while(waiting)
System.out.println("waiting:"+waiting);
System.out.println("waiting...");
startWait();
try {
Thread.sleep(10000);
} catch(Exception exc) {
System.out.println(thrdName + " interrupted.");
}
System.out.println(thrdName + " terminating.");
}
synchronized void startWait() {
try {
while(!ready){
wait();
}
} catch(InterruptedException exc) {
System.out.println("wait() interrupted");
}
}
synchronized void startWork() {
ready = true;
notify();
}
}
public class Main {
public static void main(String args[]) throws Exception{
MyThread thrd = new MyThread();
thrd.setName("MyThread #1");
System.out.println(thrd.getName()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
thrd.start();
Thread.sleep(50);
System.out.println(thrd.getName()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
thrd.waiting = false;
Thread.sleep(50);
System.out.println(thrd.getName()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
thrd.startWork();
Thread.sleep(50);
System.out.println(thrd.getName()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
if(thrd.isAlive())
System.out.println("alive");
System.out.println(thrd.getName()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
}
}
|