Sleep和Wait的区别?
1.所属的类不同
sleep方法是定义在Thread上
wait方法是定义在Object上
2.对于锁资源的处理方式不同
sleep 不会释放锁
wait 会释放
3.使用范围
sleep可以使用在任何代码块中
wait必须在同步方法中或同步代码块执行
4.与wait配套用的方法
void notify()
唤醒等待的单个线程
void notifyAll()
唤醒所有等待的线程
void wait()
等待,直到被唤醒
声明周期
为什么wait定义在Object中,而不是Thread中?
需要一个对象锁来实现多线程的互斥效果,java锁是对象级别的,而不是线程级别的。
为什么Wait必须写在同步代码块?
避免CPU切换到其他线程,而其他线程又提前执行了notify,所以需要一个同步锁来保护。
需要一个生产 一个消费