docs: private synchronized static Forest init(String key, KV<String, Forest> kv, boolean reload) {
          Forest forest = kv.getV();
          if (forest != null) {
              if (reload) {
                  forest.clear();
              } else {
                  return forest;
              }
          } else {
              forest = new Forest();
          }
          try {
  
              LOG.debug("begin init dic !");
              long start = System.currentTimeMillis();
              String temp = null;
              String[] strs = null;
              Value value = null;
              try (BufferedReader br = IOUtil.getReader(PathToStream.stream(kv.getK()), "UTF-8")) {
                  while ((temp = br.readLine()) != null) {
                      if (StringUtil.isNotBlank(temp)) {
                          temp = StringUtil.trim(temp);
                          strs = temp.split("\t");
                          strs[0] = strs[0].toLowerCase();
                          // 如何核心辞典存在那么就放弃
                          if (MyStaticValue.isSkipUserDefine && DATDictionary.getId(strs[0]) > 0) {
                              continue;
                          }
                          if (strs.length != 3) {
                              value = new Value(strs[0], DEFAULT_NATURE, DEFAULT_FREQ_STR);
                          } else {
                              value = new Value(strs[0], strs[1], strs[2]);
                          }
                          Library.insertWord(forest, value);
                      }
                  }
              }
              LOG.info("load dic use time:" + (System.currentTimeMillis() - start) + " path is : " + kv.getK());
              kv.setV(forest);
              return forest;
          } catch (Exception e) {
              LOG.error("Init dic library error :" + e.getMessage() + ", path: " + kv.getK());
              DIC.remove(key);
              return null;
          }
      }