2011-03-10 30 views
0

我每次運行監視器的以下多線程代碼時都會收到異常。執行條件時收到異常等待?

http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d

每次我執行狀態信號,我得到一個例外,它說,它應該是排他性的,它不過是排他性的,因爲它是同步的。或者我做錯了什麼?

感謝

+0

你能給我們提供你正在得到的確切例外和Monitor的代碼嗎?我看不到你在哪裏使用Lock,也沒有在代碼中同步。 – 2011-03-10 13:03:27

回答

2

你混合舊的內在鎖和他們的信令機制(​​,waitnotify)與新LockCondition類,但他們沒有任何關係。這是一個混亂的來源,所以我會堅持其中的一個(最好是LockCondition)。

您的問題可能是由於您在致電signal()時沒有按住與條件相關的鎖定而導致的。環繞與調用方法lock()unlock():

public void canEat(String name) { 
    lock.lock(); 
    try { 
     eaters.add(name); 
     if (eaters.size() > 0) { 
      canFeed.signal(); 
     } 
    } finally { 
     lock.unlock(); 
    } 
} 

同樣需要爲其他​​方法來完成。