Voici le modèle que j'ai implémenté:
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);
}
}
J'ai pensé qu'il était inutile de créer une nouvelle instance Gson pour chaque instance LoginSession.
Mais ce qui m'inquiète, ce sont les problèmes de sécurité des threads. Environ 1000 instances / s seront créées.
Est-il acceptable d'utiliser l'instance Gson comme champ statique?
Merci pour tous conseils / corrections.
java
static
thread-safety
gson
philipjkim
la source
la source
La
Gson
classe principale est thread-safe. Je viens de rencontrer un problème de sécurité des threads qui était censé être avec GSON. Le problème est survenu lors de l'utilisation d'une personnalisationJsonDeserializer
etJsonSerializer
pour l'Date
analyse et la mise en forme. En fait, le problème de la sécurité des threads était lié à l'utilisation par ma méthode d'uneSimpleDateFormat
instance statique qui n'est pas thread-safe. Une fois que j'ai enveloppé la statiqueSimpleDateFormat
dans uneThreadLocal
instance, tout s'est bien passé.la source
Selon les commentaires, le test unitaire existant ne teste pas vraiment beaucoup, soyez prudent avec tout ce qui concerne la sécurité des threads ...
Un test unitaire vérifie la sécurité des threads:
Vous vous demandez peut-être si ce test unitaire est suffisant pour trouver tous les problèmes possibles sur chaque configuration de machine possible? Des commentaires à ce sujet?
Il y a aussi cette phrase dans la documentation :
la source
Nous avons eu des problèmes avec la sécurité des threads il y a quelque temps et nous l'avons résolu en utilisant FastDateFormat dans apache commons.
Je viens de créer un lien essentiel pour Gist autour de cela pour aider les personnes à se demander si les instances Gson peuvent être réutilisées. Ils n'ont pas de setters et tous les vars sont privés.
Donc, à part le problème SimpleDateFormat, je ne les vois pas maintenir leur état ailleurs.
Vérifiez - le. C'est la première fois que je réponds à l'un d'entre eux. Heureux de redonner pour une fois. :)
la source