phi*_*kim 131 java static thread-safety gson
这是我实施的模型:
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实例用作静态字段是否可以?
感谢您的任何建议/更正.
ent*_*erd 19
核心Gson类是线程安全的.我刚刚遇到了一个与GSON有关的线程安全问题.使用自定义的时候发生的问题JsonDeserializer,并JsonSerializer为Date解析和格式化.事实证明,线程安全问题是我的方法使用的是一个SimpleDateFormat非线程安全的静态实例.一旦我将静态包装SimpleDateFormat在一个ThreadLocal实例中,一切都很好.
根据评论,现有的单元测试并没有真正测试太多,请注意与线程安全相关的任何事情......
有一个单元测试检查线程安全:
/**
 * Tests for ensuring Gson thread-safety.
 *
 * @author Inderjeet Singh
 * @author Joel Leitch
 */
public class ConcurrencyTest extends TestCase {
  private Gson gson;
  ...
您可能想知道这个单元测试是否足以在每个可能的机器配置上找到每个可能的问题?对此有何评论?
文档中也有这句话:
在调用Json操作时,Gson实例不维护任何状态.因此,您可以自由地为多个Json序列化和反序列化操作重用相同的对象.