可以使用Gson实例作为模型bean中的静态字段(重用)吗?

这是我实现的模型:

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实例创build新的Gson实例是没有用的。

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

可以使用Gson实例作为静态字段吗?

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

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

GSON实例应该是线程安全的 ,并且存在一个关于修复的bug 。

核心Gson类是线程安全的。 我刚刚遇到了一个与GSON有关的线程安全问题。 使用自定义的JsonDeserializerJsonSerializer进行Date分析和格式化时发生问题。 事实certificate,线程安全问题是我的方法使用了一个不是线程安全的静态SimpleDateFormat实例。 一旦我将静态的SimpleDateFormat包装在一个ThreadLocal实例中,一切都很好。

根据评论,现有的unit testing并没有太多的testing,要小心与线程安全相关的任何事情。

有一个unit testing检查线程安全性:

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

你可能想知道这个unit testing是否足以在每个可能的机器configuration上find每个可能的问题? 对此有何评论?

文档中还有这样一句话:

Gson实例在调用Json操作时不保持任何状态。 所以,你可以自由地重复使用同一个对象来进行多个Json序列化和反序列化操作。