wait、notify、notifyAll属于Object类下的三个普通方法
(java中所有对象都具备这三个方法)
基本使用规则:对象.wait(),使得线程进入“等待”状态,直到有其他线程,在同一个对象上调用notify/notifyAll()方法
语法
关于wait和notify的使用规则,必须先对等待的对象,通过synchronized加锁
Object o = new Object();//等待唤醒的对象
synchronized (o){
o.wait();//如果不这么操作,会收到异常
}
synchronized(o){
o.notify();
}
唤醒的线程如何知道有哪些对象在o这个对象上?
等待集(wait set):保存等在对象上的所有线程
wait:把当前线程加入到等待集中
notify:从wait set删除掉一个线程
由于多个线程修改共享数据,所以需要synchronized保护
wait
wait()的作用就是让当前线程进入等待状态,同时也会让当前线程释放它所持有的锁,直到其他线程调用notify()或notifyAll()方法,被唤醒进入就绪状态;
wait()
wait() / wait(long timeout) / wait(long timeout, int nanos)
time out : 超时
wait什么时候会醒过来:
1、会被别的线程唤醒
2、会在到达超时时间时
3、会在被别的进程打断(interrupt)时->收到一个InterruptException异常