简单了解
wait
方法和
notify
方法
wait
notify
wait()
使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。
他们是
Object
类的方法,也就是说每个对象都有这一对方法,可能初看不太好理解,但是,因为每个对象都有锁,调用任意对象的
wait()
方法导致线程阻塞,并且该对象上的锁被释放。而调用任意对象的
notify()
方法则导致因调用该对象的
wait()
方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。
notify()
的作用是唤醒随机一个因为这个锁
wait()
进入阻塞状态的线程(冷知识:实际上在
hotspot
虚拟机中是以先进先出的形式唤醒的),而
notifyAll()
顾名思义,就是唤醒所有被这个锁阻塞的线程.
总结一下是这样:
lock
对象维护了一个等待队列
list
;
线程
A
中执行
lock
的
wait
方法,把线程
A
保存到list中;
线程
B
中执行
lock
的
notify
方法,从等待队列中取出线程
A