Hier ist das Modell, das ich implementiert:Ist es in Ordnung, die Gson-Instanz als statisches Feld in einer Modell-Bean zu verwenden (Wiederverwendung)?
public class LoginSession {
private static final Gson gson = new Gson();
private String id;
private String name;
private long timestamp;
public LoginSession(String id, String name) {
this.id = id;
this.name = name;
this.timestamp = System.currentTimeMillis();
}
public String toJson() {
return gson.toJson(this);
}
public static LoginSession fromJson(String json) {
checkArgument(!isNullOrEmpty(json));
return gson.fromJson(json, LoginSession.class);
}
}
Ich dachte, es ist nutzlos für jede LoginSession Instanz neue Gson Instanz zu erstellen.
Aber worüber ich besorgt bin, sind Thread-Sicherheitsprobleme. Ungefähr 1000 Instanzen/Sek. Werden erstellt.
Ist es in Ordnung, Gson-Instanz als statisches Feld zu verwenden?
Vielen Dank für irgendwelche Hinweise/Korrekturen.
Wir hatten gerade einen Absturz wegen Nebenläufigkeit Probleme mit GSON. Ich denke also nicht, dass es 100% threadsicher ist - zumindest nicht, wenn man nachJson ruft. – slott
@slott, wie gepoolt/wiederverwendet Gson Instanzen? Instanziieren Sie jedes Mal, wenn Sie serialisieren müssen, eines davon? Oder verwende einen threadlocal Pool? –
Wir verwenden GSON zusammen mit Google Volley und wenn wir JSON-Daten gleichzeitig analysieren, sehen wir dieses Problem. Was ich sehen kann, hängt damit zusammen, dass wir einen Zeitstempel für das Parsen von Datetime-Werten definieren. – slott