遅延実行可能オブジェクトをハンドラーに渡す関数にオブジェクトが渡されました。
オブジェクトが渡されたとき、およびロックオブジェクトを使用して変更されたときにオブジェクトをロックできますが、オブジェクトは「エイリアン」メソッドのアップロードに渡される必要があります。
このエイリアンメソッドのアップロードがオブジェクトのスレッドセーフを壊さないようにするにはどうすればよいですか?
この遅延スレッドだけでなく他の場所から渡されたオブジェクトがあるため、オブジェクトロックは無効であり、非常に多くの機能が含まれているため、呼び出し全体をロックオブジェクトでロックする必要があります。
private ContentValues mEvent;
protected final Object mEventLock = new Object();
public void delayFunction(final Values e) {
// Sanity check
if (e == null) {
return;
}
synchronized (mEventLock) {
mEvent = e;
}
this.handler.postDelayed(new Runnable() {
@Override
public void run() {
if (prefs != null) {
final String refs = prefs.getPrefs();
if (refs != null && refs != "") {
log.d("refs field: '%s'", refs);
synchronized (mEventLock) {
mEvent.remove(refs);
mEvent.put(refs, 1);
}
}
}
synchronized (mEventLock) {
// Upload event.
upload(mEvent);
}
}
}, INSTALL_DELAY);
}