在多线程中什么是等待通知机制?
生活总最常见的例子就是上菜系统
1:方法wait()方法作用就是使当前执行代码的线程进行等待,该方法是object类的方法,会使当前线程释放锁。该方法只能在同步方法或则同步块中调用wait()方法。
2:notify()方法也要在同步方法或则同步块中调用,该方法用来通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则有线程规划器随机挑选一个呈wait状态的线程,对其发出通知notify,并使它等待获取该对象的对象锁。在执行notify()方法后,当前线程不会马上释放对象锁,呈wait状态的想爱你成也不会马上获得该对象锁,要等待执行notify()方法的线程将程序执行完,也就是退出synchronized代码块后,当前线程才会释放锁,而wait状态所有的线程才可以获取该对象锁。
public class MyList {
private static List list = new ArrayList();
public static void add() {
list.add("anyString");
}
public static int size() {
return list.size();
}
}
public class ThreadA extends Thread {
private Object lock;
public ThreadA(Object lock) {
super();
this.lock = lock;
}
@Override
public void run() {
try {
synchronized (lock) {
if (MyList.size() != 5) {
System.out.println("wait begin "
+ System.currentTimeMillis());
lock.wait();
System.out.println("wait end "
+ System.currentTimeMillis());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadB extends Thread {
private Object lock;
public ThreadB(Object lock) {
super();
this.lock = lock;
}
@Override
public v