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

philipjkim picture philipjkim · Apr 30, 2012 · Viewed 54.9k times · Source

Here's the model I implemented:

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);
    }
}

I thought it's useless to create new Gson instance for every LoginSession instance.

But what I'm worried about is thread-safety issues. Approximately 1000+ instances/sec will be created.

Is it OK to use Gson instance as static field?

Thanks for any advices/corrections.

Answer

MByD picture MByD · Apr 30, 2012

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.