通知を受け取ったら、非同期で更新操作を行う必要があります。以下のupdate()
メソッドは、インスタンス変数を操作します。
public class UpdateOperation implements Runnable
{
private Boolean isInProgress = false;
@Override
public void run() {
try
{
synchronized (isInProgress)
{
isInProgress = true;
}
update(); //perform update
synchronized (isInProgress)
{
isInProgress = false;
}
}
catch (UpdaterException e)
{
// deal with it
}
}
}
// In another class
private UpdateOperation mCurrentUpdateOperation = new UpdateOperation();
public void updateRequired()
{
synchronized (mCurrentUpdateOperation.isInProgress)
{
if (!mCurrentUpdateOperation.isInProgress)
{
new Thread(mCurrentUpdateOperation).start();
}
else
{
// reschedule or silently ignore
}
}
}
この設定は、2つの更新操作を同時に実行するのに十分ですか?ブロックに到達した最初のスレッドがsynchronized
ロックを取得し、操作を開始し、ロックを解放するためだと思います。次に、2番目(またはそれ以上)がロックを取得し、操作が進行中であることを確認し、スケジュールを変更して、ロックを解放します。
このセットアップが失敗することはありますか?