一、wait:
1. wait 是 object 类的方法, sleep 是 thread 类的方法.
2. 当前的正在我这个对象访问的线程 wait.
3. 当前的这个线程, 锁定在当前对象的这个线程停止住.
4. 只有锁定后, 才能有wait; 如果不是 synchronized, 直接调用 wait, 立马出错.
二、锁的问题:
1. 原来不是拥有这个对象的锁吗? 一旦 wait ,立马就死了, 这个对象的锁就不再归我所有, 只有醒过来的时候, 我才会再找这把锁, 把它找回来.
三、wait 与 sleep 的区别:
1. wait 的时候, 锁就不再给我所有.
2. sleep 的时候, 睡着了也抱着那把锁, 它比较贪婪.
四、notify:
1. this.notify 叫醒一个现在正在 wait 在我这个对象上的线程, 谁现在正在我的这个对象上等待, 我就叫醒一个线程, 让它继续执行.
五、wait 什么时候用:
发生了一个阻塞事件, 已经满了, 这个时候我只能 wait, 而且我不知道我要 wait 多长时间. 所以就一睡不起, 什么时候我就醒了呢?
当前对象有人调用了 notify(), 我就醒了, 我就继续执行. 但是, 你即使执行过来的时候, 哪怕你被打断了, 你也必须检查现在是不是
还在阻塞状态, 若还是阻塞, 就继续睡. 睡醒的第一件事, 就是把其他的线程也叫醒, 然后再做自己的事(多线程同步).