import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import com.afan.util.SleeepUtils;
public class WaitNotify {
static boolean flag =
true;
static Object lock =
new Object();
public static void main(String[] args) {
Thread waitThread =
new Thread(
new Wait(),
"waitThread");
waitThread.start();
try {
TimeUnit.SECONDS.sleep(
10);
}
catch (InterruptedException e) {
e.printStackTrace();
}
Thread notifyThread =
new Thread(
new Notify(),
"notifyThread");
notifyThread.start();
}
static class Wait implements Runnable{
@Override
public void run() {
synchronized (lock) {
while(flag){
try {
System.out.println(Thread.currentThread()+
" flag is true was"
+
new SimpleDateFormat(
"HH:mm:ss").format(
new Date()));
lock.wait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread()+
" flag is false running "
+
new SimpleDateFormat(
"HH:mm:ss").format(
new Date()));
}
}
}
static class Notify implements Runnable{
@Override
public void run() {
synchronized (lock) {
System.out.println(Thread.currentThread() +
"hold lock notify "
+
new SimpleDateFormat(
"HH:mm:ss").format(
new Date()));
lock.notifyAll();
flag =
false;
SleeepUtils.second(
5);
}
synchronized (lock) {
System.out.println(Thread.currentThread() +
"hold lock again sleep"
+
new SimpleDateFormat(
"HH:mm:ss").format(
new Date()));
SleeepUtils.second(
5);
}
}
}
}