我有一个关于Singleton类行为的问题。
场景
我们有被合作伙伴使用的We服务,请求在1秒内频繁出现2-3次。因此,它们是大量使用的服务。我们希望以JSON格式存储请求和响应。
到目前为止,在每个webservice接口类中,我们已经启动了Gson对象,并将java对象序列化为json。
问题
我只是在想,如果我在Singleton类中启动一次Gson对象作为静态对象,然后将它引用到所有java对象的请求/响应序列化到Json,它会引起任何问题/问题吗?
我的意思是,由于有多个can服务,其中有两个被合作伙伴大量使用,那么在所有webservice中访问GSON的单个实例是否会导致任何延迟或任何其他问题?如果是的话,除了记忆之外,还有什么好处和问题呢?
发布于 2017-03-31 05:00:08
来自Gson的javadoc
这是使用Gson的主要类。Gson通常通过首先构造Gson实例,然后在其上调用
toJson(Object)或fromJson(String, Class)方法来使用。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);
}
}或者你可以按你的方式做:-)
发布于 2017-03-31 05:02:19
最近我也有同样的想法。有与此Is it OK to use Gson instance as a static field in a model bean (reuse)?相关的旧线程。简单地总结一下GSON实例应该是线程安全的。
https://stackoverflow.com/questions/43132443
复制相似问题