このトピックに関する多くの回答があり、それらをすべて読んだと思います。 ほとんどの回答には、使用する名前空間は含まれておらず、提案するコードのコンパイルは事実上不可能です。ArrayListを使用したIllegalMonitorStateException NotifyAll()Wait()
私はXamarinでVS 2015 Comunityを使用しています。これは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()
を呼び出すまでブロックされているように見えるので、上記のコードは、正しくに動作します。問題はmsgList.NotifyAll()
へのすべての呼び出しに対して生成され、私は無視しています。IllegalMonitorStateException
です。
スレッドが1つしか通知せず、1つだけ待機するため、同期の問題はありませんが、例外は心配です。
public static ArrayList msgList = new ArrayList(); –