我知道這個主題有很多答案,我想我已經讀了所有。 大多數答案不包括他們使用的命名空間,並且編譯他們認爲幾乎不可能的代碼。IllegalMonitorStateException與ArrayList NotifyAll()等待()
我正在使用VS 2015 Comunity與Xamarin,這是一個Android項目。
我的命名空間:
using Android.Graphics;
using Android.Util;
using Java.Lang;
using Java.Util;
我的代碼:
public static int updateWait() // Called by a thread.
{
int value = 0;
try
{
while (msgList.IsEmpty)
{
msgList.Wait();
}
value = (int)msgList.Get(0);
msgList.Remove(0) ;
}
catch (Exception e)
{
Log.Debug("", "" + e);
}
return value;
}
public static void updateNotify() // called by a service
{
if (msgList.IsEmpty)
{
msgList.Add(1000);
}
try
{
msgList.NotifyAll();
}
catch (Exception e)
{
Log.Debug("", "" + e);
}
}
上面的代碼工作正確,因爲從活動線程似乎被阻止,直到服務調用updateNotify()
。問題是IllegalMonitorStateException
是爲每個致電msgList.NotifyAll()
的電話生成的,我忽略了這一點。
由於只有一個線程通知,只有一個等待,沒有同步問題 - 但例外情況令人擔憂。
public static ArrayList msgList = new ArrayList(); –