我有一个对象传递给一个函数,该函数将延迟的可运行对象传递给处理程序。
我可以在对象被传入和使用锁定对象更改对象时锁定它,但随后需要将对象传递给“外星人”方法上传。
如何确保这种外来方法上传不会破坏我的对象的线程安全?
它有从其他地方传入的对象,而不仅仅是这个延迟线程,所以对象锁是无效的,它包含很多功能,所以我担心用锁对象锁定整个调用。
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);
}