code: private ThreadLocal<StringMap> createThreadLocalMap() {
          final PropertiesUtil managerProps = PropertiesUtil.getProperties();
          final boolean inheritable = managerProps.getBooleanProperty(INHERITABLE_MAP);
          if (inheritable) {
              return new InheritableThreadLocal<StringMap>() {
                  @Override
                  protected StringMap childValue(final StringMap parentValue) {
                      return parentValue != null ? createStringMap(parentValue) : null;
                  }
              };
          }
          // if not inheritable, return plain ThreadLocal with null as initial value
          return new ThreadLocal<>();
      }
docs: (This method is package protected for JUnit tests.)