[英]Java synchronized passing object to alien method
我有一个传递给函数的对象,该函数将延迟的可运行变量传递给处理程序。
我可以在对象传入和更改时使用lock对象锁定该对象,但随后需要将该对象传递给“外星人”方法上传。
如何确保此外来方法上传不会破坏对象的线程安全性?
它具有从其他地方传入的对象,而不仅仅是这个延迟线程,因此对象锁定无效,并且它包含很多功能,因此我担心使用lock对象锁定整个调用。
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);
}
我不确定我是否理解您要在代码中实现的目标:
delayFunction
开始通过分配e
到mEvent
您为什么不简单地制作e
的本地副本并在不同步的情况下处理该副本?
此外, mEvent
可以通过与另一个线程修改mEvent = e
和运行执行,因为你退出synchronized块:您可运行的客户将会在另一个工作e
,你会错过上传。
但这也许是故意的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.