Est-il possible d'utiliser Gson instance comme un champ statique dans un modèle de bean (réutilisation)?
Voici le modèle que j'ai mis en œuvre:
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);
}
}
Je pensais que c'est inutile de créer de nouveaux Gson instance pour chaque LoginSession instance.
Mais ce qui m'inquiète, c'est thread-les questions de sécurité. Environ 1000+ instances/s sera créé.
Est-il OK pour utiliser Gson l'instance du champ statique?
Merci pour les conseils/corrections.
Vous devez vous connecter pour publier un commentaire.
Il semble bien que moi. Il n'y a rien dans le GSON instance qui en fait liée à une instance spécifique de
LoginSession
, de sorte qu'il doit être statique.GSON instances doit être thread-safe, et il y avait un bug concernant ce qui a été fixé.
La base
Gson
classe est thread-safe. J'ai juste rencontré un thread problème de sécurité qui a été soi-disant avec GSON. La question qui s'est passé lors de l'utilisation d'une coutumeJsonDeserializer
etJsonSerializer
pourDate
d'analyse et de formatage. Comme il s'est avéré, au fil problème de sécurité a été avec ma méthode est l'utilisation d'un statiqueSimpleDateFormat
exemple, n'est pas thread-safe. Une fois que j'ai enveloppé la statiqueSimpleDateFormat
dans unThreadLocal
exemple, tout allait bien.Selon les commentaires de l'existant de l'unité de test ne permet pas de vraiment tester beaucoup, être prudent avec tout ce qui est lié à la sécurité des threads...
Il y a un unité de test la vérification de la sécurité des threads:
Vous pouvez vous demander si ce test est suffisante pour trouver chaque problème possible sur tous les possibles de la configuration de la machine ? Tous les commentaires sur cette ?
Il y a aussi cette phrase dans le docs: