首先,wait调用之后会让线程阻塞。
java的wait()
方法必须在当前获取的锁对象上调用,比如说
// 一个对象
Object objectLock = new Object();
// 以objectLock为锁对象
syncronized(objectLock)
{
// 只能这样调用wait
objectLock.wait();
}
只有在线程持有锁的时候,才可以调用wait(), wait()
方法调用时,会 释放 线程获得的锁,并且阻塞当前线程。wait()
方法返回后,线程又会重新试图获得锁。
wait()方法何时返回?在锁对象上调用notify后,wait方法就会返回,并且会去争夺锁。
但调用notify后会立即释放锁资源吗?不会!
notify()或者notifyAll()调用时并不会真正释放对象锁, 必须等到synchronized方法或者语法块执行完才真正释放锁.