java的每個對象都有壹個監視器,只能被同壹線程擁有(即同壹線程可重入),壹旦被壹個線程獲取,那其它線程只能等待。synchronized(obj)意思就是獲得obj的監視器,對應於monitorenter,代碼塊結束時自動釋放,相當於monitorexit。
只有獲得了對象的監視器,才能執行監視器方法,也就是wait、notify或notifyAll。也就是只有synchronized(this)後才能this.wait或this.notify,不能獲得壹個對象的監視器而執行另壹個對象的監視器方法。
在condictin上await後必須有線程調用condition.signal()。妳可以在妳的線程上提供2個方法:
class RunA implements Runable {
public void wait1() {
lock.lock();
try {
condition.await();
}finally{
lock.unlock();
}
}
public void continue1() {
lock.lock();
try {
condition.signal();
} finally {
lock.unlock();
}
}
}
本線程調用wait1,另壹線程調用continue1通知繼續,這跟在Object上的wait與notify是壹回事