为什么需要线程通信?
因为多个线程,操作这个共享数据。
1.调用wait()方法
- 线程阻塞。
- 一旦执行wait(),会释放锁(同步监视器)。**
- .wait必须使用在同步代码块,同步方法
2.有wait就有notify()方法
notify() 唤醒被wait()的一个线程,如果多个线程被wait,就唤醒优先级较高的那个。
notifyall() 一旦执行此方法,就会唤醒所有被wait()的线程
然后wait和notifyall,notify调用者,
必须是这个同步监视器。
然后这三个方法定义在Object类里。
sleep和wait有什么区别呢?
1.相同:一旦执行此方法,都可以让当前线程阻塞。
2.不同,Thread类中声明sleep()
Object类中声明wait()
3.sleep可以在任何需要的场景下调用
wait必须使用在同步代码块,同步方法
4.sleep()不会释放锁,wait()会释放锁。