关于wait与notify和notifyAll方法总结
1、wait()
1、调用某对象wait,必须现持有该对象的锁。(PS:调用wait方法的代码片段必须在synchronized代码块或者synchronized方法体中)
2、调用wait后,该线程会释放锁,然后进入对象的wait set(等待集合)
3、线程调用某对象的wait后进入等待状态后,该线程就等待其他线程调用该对象的notify或者notifyAll来唤醒
4、一旦这个线程被其他线程唤醒后,该线程就与其他线程开始争抢该对象的锁(公平),只有获取了对象锁的线程才能继续执行
2、notify()
1、调用对象的notify时,必须持有该对象的锁。(PS:调用notify方法的代码片段必须在synchronized代码块或者synchronized方法体中)
这将会随机唤醒该对象wait set中的一个线程,被唤起的线程将会与其他线程一同竞争该对象的锁
3、notifyAll()
1、调用对象的notifyAll时,必须持有该对象的锁。(PS:调用notify方法的代码片段必须在synchronized代码块或者synchronized方法体中)
这将会唤醒该对象wait set中的所有线程,被唤起的线程将会与其他线程一同竞争该对象的锁