是否可以将 Gson 实例用作模型 Bean 中的静态字段(重用)?

2022-08-31 07:20:34

这是我实现的模型:

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

我认为为每个LoginSession实例创建新的Gson实例是没有用的。

但我担心的是线程安全问题。将创建大约 1000 多个实例/秒。

是否可以将 Gson 实例用作静态字段?

感谢您的任何建议/更正。


答案 1

这对我来说似乎很好。在 GSON 实例中没有任何内容使它与 的特定实例相关,因此它应该是静态的。LoginSession

GSON实例应该是线程安全的,并且有一个关于已修复的错误


答案 2

核心类是线程安全的。我刚刚遇到了一个线程安全问题,据说是GSON。使用自定义以及进行解析和格式化时出现问题。事实证明,线程安全问题与我的方法使用非线程安全的静态实例有关。一旦我将静态包装在一个实例中,一切都很好。GsonJsonDeserializerJsonSerializerDateSimpleDateFormatSimpleDateFormatThreadLocal


推荐