Ich benutze Java Callable Future in meinem Code. Unten ist mein Haupt-Code, der die Zukunft und Callables verwendet -Soll GSON als statisches Finale deklariert werden?
unter meinem Haupt-Code, die die Zukunft und Callables verwendet -
public class TimeoutThread {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(5);
Future<TestResponse> future = executor.submit(new Task());
try {
System.out.println(future.get(3, TimeUnit.SECONDS));
} catch (TimeoutException e) {
}
executor.shutdownNow();
}
}
Unten ist meine Task
Klasse, die die aufrufbare Schnittstelle, in denen implementiert Ich mache Ein REST-URL-Aufruf an meine Server unter Verwendung von RestTemplate
. Und dann übergebe ich response
Variable zu checkString
Methode, in der ich die JSON-Schnur deserializing bin und dann überprüfe ich, ob der Schlüssel error
oder warning
darin hat und dann Grundlage auf diesem bildet ein TestResponse
.
class Task implements Callable<TestResponse> {
private static RestTemplate restTemplate = new RestTemplate();
@Override
public TestResponse call() throws Exception {
String url = "some_url";
String response = restTemplate.getForObject(url, String.class);
TestResponse response = checkString(response);
}
}
private TestResponse checkString(final String response) throws Exception {
Gson gson = new Gson(); // is this an expensive call here, making objects for each and every call?
TestResponse testResponse = null;
JsonObject jsonObject = gson.fromJson(response, JsonObject.class); // parse, need to check whether it is an expensive call or not.
if (jsonObject.has("error") || jsonObject.has("warning")) {
final String error = jsonObject.get("error") != null ? jsonObject.get("error").getAsString() : jsonObject
.get("warning").getAsString();
testResponse = new TestResponse(response, "NONE", "SUCCESS");
} else {
testResponse = new TestResponse(response, "NONE", "SUCCESS");
}
return testResponse;
}
Also meine Frage ist, wie sollte ich GSON
hier erklären? Sollte es als statische finale globale Variable in meiner Task-Klasse deklariert werden? Bcoz derzeit analysiere ich JSON mit gson und für jeden Anruf mache ich was wäre teuer oder nicht?
Siehe http://stackoverflow.com/questions/10380835/is-it-ok-to-use-gson-instance-as-a-static-field-in-a-model-bean-reuse – Vadzim