我对Singleton类行为有疑问。
情景
我们有合作伙伴使用的Web服务,请求在1秒内频繁发生2-3次。因此,它们是大量使用的服务。我们希望以JSON格式存储请求和响应。
截至目前,在每个webservice接口类中,我们已经启动了Gson对象并将java对象序列化为json。
问题
我只是在想,如果我在Singleton类中将Gson对象作为静态对象启动一次,然后将其引用给Json的所有请求/响应序列化java对象,它会导致任何问题吗?
我的意思是,由于有多个Web服务,其中几个被合作伙伴大量使用,因此在所有Web服务中访问的单个GSON实例会导致任何延迟或任何其他问题吗?如果是,除了记忆之外,它还有哪些其他好处和问题?
答案 0 :(得分:0)
来自Gson
的javadoc:
这是使用Gson的主要类。通常首先使用Gson实例,然后在其上调用
toJson(Object)
或fromJson(String, Class)
方法来使用Gson。 Gson实例是线程安全的,因此您可以在多个线程中自由地重用它们。
因此,您的服务中只有一个Gson
实例,并且可以为每个请求/响应重复使用它。作为示例,您可以考虑创建一个util类,类似于以下类:
public abstract class GsonUtils {
private static Gson gson = new Gson();
static {
// your extra init logic goes here
}
public static <T> T fromJson(String json, Class<T> classOfT) {
return gson.fromJson(json, classOfT);
}
public static String toJson(Object object) {
if (object == null) {
return "";
}
return gson.toJson(object);
}
}
或者你可以这样做: - )
答案 1 :(得分:0)
最近我处理的是同样的想法。存在与此Is it OK to use Gson instance as a static field in a model bean (reuse)?相关的旧线程。简单地总结一下,GSON实例应该是线程安全的。