Is it OK to use Gson instance as a static field in a model bean (reuse)? Is it OK to use Gson instance as a static field in a model bean (reuse)? java java

Is it OK to use Gson instance as a static field in a model bean (reuse)?


It seems just fine to me. There is nothing in the GSON instance that makes it related to a specific instance of LoginSession, so it should be static.

GSON instances should be thread-safe, and there was a bug regarding that which was fixed.


The core Gson class is thread-safe. I just encountered a thread-safety issue that was supposedly with GSON. The issue happened when using a custom JsonDeserializer and JsonSerializer for Date parsing and formatting. As it turned out, the thread-safety issue was with my method's use of a static SimpleDateFormat instance which is not thread-safe. Once I wrapped the static SimpleDateFormat in a ThreadLocal instance, everything worked out fine.


According to the comments the existing unit test does not really test much, be careful with anything related to thread safety...

There is a unit test checking for thread safety:

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

You may wonder if this unit test is sufficient to find every possible problem on every possible machine configuration ? Any comments on this ?

There is also this sentence in the docs:

The Gson instance does not maintain any state while invoking Json operations. So, you are free to reuse the same object for multiple Json serialization and deserialization operations.