code: public F getInstance(final String pattern, TimeZone timeZone, Locale locale) {
          Validate.notNull(pattern, "pattern must not be null");
          if (timeZone == null) {
              timeZone = TimeZone.getDefault();
          }
          if (locale == null) {
              locale = Locale.getDefault();
          }
          final MultipartKey key = new MultipartKey(pattern, timeZone, locale);
          F format = cInstanceCache.get(key);
          if (format == null) {
              format = createInstance(pattern, timeZone, locale);
              final F previousValue= cInstanceCache.putIfAbsent(key, format);
              if (previousValue != null) {
                  // another thread snuck in and did the same work
                  // we should return the instance that is in ConcurrentMap
                  format= previousValue;
              }
          }
          return format;
      }
docs: <p>Gets a formatter instance using the specified pattern, time zone
  and locale.</p>
  
  @param pattern  {@link java.text.SimpleDateFormat} compatible
  pattern, non-null
  @param timeZone  the time zone, null means use the default TimeZone
  @param locale  the locale, null means use the default Locale
  @return a pattern based date/time formatter
  @throws IllegalArgumentException if pattern is invalid
  or <code>null</code>