¿Está bien usar la instancia de Gson como campo estático en un bean modelo (reutilización)?

Este es 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 1000+ instancias / seg.

¿Está bien usar la instancia de Gson como campo estático?

Gracias por cualquier consejo / corrección.

Me parece bien. No hay nada en la instancia de GSON que lo relacione con una instancia específica de LoginSession , por lo que debe ser estático.

Las instancias GSON deberían ser seguras para subprocesos , y había un error con respecto a lo que se arregló.

La clase principal de Gson es thread-safe. Acabo de encontrar un problema de seguridad de hilos que supuestamente estaba con GSON. El problema ocurrió cuando se usaba un JsonDeserializer personalizado y un JsonSerializer para analizar y formatear la fecha. Al final resultó que, el problema de seguridad de subprocesos era con el uso de mi método de una instancia estática SimpleDateFormat que no es segura para subprocesos. Una vez que envolví el SimpleDateFormat estático en una instancia de ThreadLocal , todo salió bien.

Según los comentarios, la prueba unitaria existente realmente no prueba mucho, tenga cuidado con todo lo relacionado con la seguridad de la rosca …

Hay una prueba unitaria que verifica la seguridad del hilo:

 /** * Tests for ensuring Gson thread-safety. * * @author Inderjeet Singh * @author Joel Leitch */ public class ConcurrencyTest extends TestCase { private Gson gson; ... 

Quizás se pregunte si esta prueba unitaria 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 :

La instancia de Gson no mantiene ningún estado mientras se invocan las operaciones de Json. Por lo tanto, puede reutilizar el mismo objeto para múltiples operaciones de serialización y deserialización de Json.