class
MyThread
extends
Thread {
boolean
waiting =
true
;
boolean
ready =
false
;
MyThread() {}
synchronized
void
startWait()
{
try
{
while
(!ready)
wait();
}
catch
(InterruptedException exc) {
System.out.println(
"wait() interrupted"
);
}
}
synchronized
void
notice()
{
ready =
true
;
notify();
}
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(
1000
);
}
catch
(Exception exc) {
System.out.println(thrdName +
" interrupted."
);
}
System.out.println(thrdName +
" terminating."
);
}
}
public
class
GFG {
static
void
showThreadStatus(Thread thrd)
{
System.out.println(thrd.getName()
+
" Alive:="
+ thrd.isAlive()
+
" State:="
+ thrd.getState());
}
public
static
void
main(String args[])
throws
Exception
{
MyThread thrd =
new
MyThread();
thrd.setName(
"MyThread #1"
);
showThreadStatus(thrd);
thrd.start();
Thread.sleep(
50
);
showThreadStatus(thrd);
thrd.waiting =
false
;
Thread.sleep(
50
);
showThreadStatus(thrd);
thrd.notice();
Thread.sleep(
50
);
showThreadStatus(thrd);
while
(thrd.isAlive())
System.out.println(
"alive"
);
showThreadStatus(thrd);
}
}