0
我每次運行監視器的以下多線程代碼時都會收到異常。執行條件時收到異常等待?
http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d
每次我執行狀態信號,我得到一個例外,它說,它應該是排他性的,它不過是排他性的,因爲它是同步的。或者我做錯了什麼?
感謝
我每次運行監視器的以下多線程代碼時都會收到異常。執行條件時收到異常等待?
http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d
每次我執行狀態信號,我得到一個例外,它說,它應該是排他性的,它不過是排他性的,因爲它是同步的。或者我做錯了什麼?
感謝
你混合舊的內在鎖和他們的信令機制(,wait
和notify
)與新Lock
和Condition
類,但他們沒有任何關係。這是一個混亂的來源,所以我會堅持其中的一個(最好是Lock
和Condition
)。
您的問題可能是由於您在致電signal()
時沒有按住與條件相關的鎖定而導致的。環繞與調用方法lock()
和unlock():
public void canEat(String name) {
lock.lock();
try {
eaters.add(name);
if (eaters.size() > 0) {
canFeed.signal();
}
} finally {
lock.unlock();
}
}
同樣需要爲其他方法來完成。
你能給我們提供你正在得到的確切例外和Monitor的代碼嗎?我看不到你在哪裏使用Lock,也沒有在代碼中同步。 – 2011-03-10 13:03:27