[英]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.