public
class
notify
... {
public notify()
...{}
public static void main(String[] args)
...{
Object obj = new Object();
Thread wait1 = new Thread(new LockWait(obj));
Thread wait2 = new Thread(new LockWait(obj));
Thread notify1 = new Thread(new LockNotify(obj));
wait1.start();
wait2.start();
notify1.start();
// System.out.println("Hello World!");
}
}
class LockWait implements Runnable
... {
private Object obj;
public LockWait(Object obj)
...{
this.obj = obj;
}
public void run()
...{
synchronized(obj)
...{
try...{
System.out.println(Thread.currentThread().getName()+" is waiting");
obj.wait();
System.out.println(Thread.currentThread().getName()+" woke up");
}catch(InterruptedException e)...{
}
}
}
}
class LockNotify implements Runnable
... {
Object obj;
public LockNotify(Object obj)
...{
this.obj = obj;
}
public void run()
...{
synchronized(obj)...{
System.out.println(Thread.currentThread().getName()+" will wake up some thread");
obj.notify();
}
}
}
... {
public notify()
...{}
public static void main(String[] args)
...{
Object obj = new Object();
Thread wait1 = new Thread(new LockWait(obj));
Thread wait2 = new Thread(new LockWait(obj));
Thread notify1 = new Thread(new LockNotify(obj));
wait1.start();
wait2.start();
notify1.start();
// System.out.println("Hello World!");
}
}
class LockWait implements Runnable
... {
private Object obj;
public LockWait(Object obj)
...{
this.obj = obj;
}
public void run()
...{
synchronized(obj)
...{
try...{
System.out.println(Thread.currentThread().getName()+" is waiting");
obj.wait();
System.out.println(Thread.currentThread().getName()+" woke up");
}catch(InterruptedException e)...{
}
}
}
}
class LockNotify implements Runnable
... {
Object obj;
public LockNotify(Object obj)
...{
this.obj = obj;
}
public void run()
...{
synchronized(obj)...{
System.out.println(Thread.currentThread().getName()+" will wake up some thread");
obj.notify();
}
}
}
如果一个线程使用的同步方法中用到某个变量,而此变量又需要其他的线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法,是本线程等待,并运行其他线程使用这个同步方法。其他线程如果在使用这个同步方法时不需要支持,那么它使用 完这个同步方法的同时,用notiy()或者notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程,让他们结束等待,在此使用这个同步方法。