Should this have synchronized(JSONUtils.class) and another if(httpClient == null) (along with the variable being volatile) to ensure that only a single HttpClient is created if multiple threads call this method while httpClient is null?

It is not the ideal model, but if we want to continue to support a static interface we may have to do it this way.