Ich habe eine einfache Methode, die aus mehreren Threads aufgerufen wird;Java-Synchronisation - Brauche ich es für diese einfache Methode?
@Override
public Bitmap getFullBitmap(Filter f, ProgressCallback<String> pc) {
// Requires synchronisation?
Bitmap bitmap = fullMap.get(f.id);
if(bitmap == null){
f.setProgressCallback(pc);
bitmap = f.e.evaluate(currentBitmap);
fullMap.put(f.id, bitmap);
}
return bitmap;
}
Da keines der Objekte verwendet werden Felder der Klasse (abgesehen von fullMap) ist es nur ok dies zu nennen oder auch den Wert von Bitmap zum Beispiel ein Thread ändern, während das Verfahren ausgeführt wird?
fullMap ist eine SoftHashMap, die SoftReferences von indizierten Bitmap-Objekten verwaltet, aber die ID des Filters, mit der sie erstellt wurde. Wenn das irgendeinen Sinn ergibt.
Ich hatte keine Probleme, aber ich dachte, ich könnte es brauchen.
Bitte fragen Sie nach Klärung, wenn dies nicht klar ist, macht die Frage Sinn in meinem Kopf;)
EDIT
- currentBitmap ist ein Objekt vom Typ Bitmap, gibt es eine Bitmap in der System, das als aktuell angesehen wird und von dieser Klasse verwaltet wird.
- Dieser Code bildet einen sehr einfachen Cache, Die zurückgegebene Bitmap ist immer das gleiche für jede ID und ist nicht geändert außerhalb dieser Methode.
- von Soft-Referenzen in einer SoftHashMap Verwendung als durch Dr Heinx und eine FIFO-Warteschlange von harten Referenzen für die 10 zuletzt descibed habe ich teure Anrufe f.e.evaluate zu vermeiden hoffen. Das heißt, der Aufruf von e.evaluate wird ein identisches Bitmap-Objekt zurückgeben, wenn es die gleiche Eingabe gegeben hat. Nach ein paar dachte, es scheint, dass die Synchronisierung die Methode ist eine gute Idee, wie nichts positive kommt von zwei Threads Ausführung dieses Codes für die gleichen Filter.
- Zusätzlich habe ich Bitmap-Finale gemacht, wie es sollte nach der Erstellung nicht mutiert werden.
Vielen Dank! Gav
was ist currentBitmap? – akf