Aquí está el modelo que implementé:
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);
}
}
Pensé que era inútil crear una nueva instancia de Gson para cada instancia de LoginSession.
Pero lo que me preocupa son los problemas de seguridad de los hilos. Se crearán aproximadamente más de 1000 instancias / seg.
¿Está bien usar la instancia de Gson como campo estático?
Gracias por cualquier consejo / corrección.
java
static
thread-safety
gson
philipjkim
fuente
fuente
La
Gson
clase principal es segura para subprocesos. Acabo de encontrar un problema de seguridad de hilos que supuestamente estaba relacionado con GSON. El problema ocurrió cuando se usaba una costumbreJsonDeserializer
yJsonSerializer
paraDate
analizar y formatear. Al final resultó que, el problema de seguridad de subprocesos fue con el uso de mi método de unaSimpleDateFormat
instancia estática que no es segura para subprocesos. Una vez que envolví la estáticaSimpleDateFormat
en unaThreadLocal
instancia, todo salió bien.fuente
De acuerdo con los comentarios, la prueba de la unidad existente realmente no prueba mucho, tenga cuidado con cualquier cosa relacionada con la seguridad del hilo ...
Hay una prueba de unidad que verifica la seguridad del hilo:
¿Se preguntará si esta prueba de unidad es suficiente para encontrar todos los problemas posibles en cada configuración de máquina posible? ¿Algún comentario sobre esto?
También hay esta oración en los documentos :
fuente
Tuvimos problemas con la seguridad de subprocesos hace un tiempo y lo resolvimos usando FastDateFormat en apache commons.
Acabo de crear un enlace Gist para Gist en torno a esto para ayudar a las personas a preguntarse si las instancias de Gson pueden reutilizarse. No tienen setters y todos los vars son privados.
Entonces, aparte del problema SimpleDateFormat, no veo que mantengan el estado en ningún otro lugar.
Mira esto . Esta es la primera vez que respondo a uno de estos. Feliz de devolver por una vez. :)
fuente