Hier ist das Modell, das ich implementiert habe:
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 fand es sinnlos, für jede LoginSession-Instanz eine neue Gson-Instanz zu erstellen.
Was mich jedoch beunruhigt, sind Fragen der Thread-Sicherheit. Es werden ungefähr 1000+ Instanzen / Sek. Erstellt.
Ist es in Ordnung, die Gson-Instanz als statisches Feld zu verwenden?
Vielen Dank für Ratschläge / Korrekturen.
java
static
thread-safety
gson
philipjkim
quelle
quelle
Die Kernklasse
Gson
ist threadsicher. Ich bin gerade auf ein Thread-Sicherheitsproblem gestoßen, das angeblich mit GSON zusammenhängt. Das Problem trat bei der Verwendung einer benutzerdefinierten FunktionJsonDeserializer
sowieJsonSerializer
beimDate
Parsen und Formatieren auf. Wie sich herausstellte, bestand das Thread-Sicherheitsproblem darin, dass meine Methode eine statischeSimpleDateFormat
Instanz verwendete, die nicht threadsicher ist. Nachdem ich die StatikSimpleDateFormat
in eineThreadLocal
Instanz eingewickelt hatte , funktionierte alles einwandfrei.quelle
Laut den Kommentaren testet der bestehende Unit-Test nicht wirklich viel, seien Sie vorsichtig mit allem, was mit Thread-Sicherheit zu tun hat ...
Es gibt einen Unit-Test zur Überprüfung der Gewindesicherheit:
Sie fragen sich vielleicht, ob dieser Komponententest ausreicht, um jedes mögliche Problem bei jeder möglichen Maschinenkonfiguration zu finden? Irgendwelche Kommentare dazu?
Es gibt auch diesen Satz in den Dokumenten :
quelle
Wir hatten vor einiger Zeit Probleme mit der Thread-Sicherheit und haben sie durch die Verwendung von FastDateFormat in Apache Commons gelöst.
Ich habe gerade einen Link für Gist erstellt, um den Leuten zu helfen, sich zu fragen, ob Gson-Instanzen wiederverwendet werden können. Sie haben keine Setter und alle Vars sind privat.
Abgesehen vom SimpleDateFormat-Problem sehe ich nirgendwo anders einen Status.
Probieren Sie es aus. Ich antworte zum ersten Mal auf eine dieser Fragen. Gerne einmal zurückgeben. :) :)
quelle