@Override
  public final synchronized boolean check(CueSheet cs) {
    boolean Ret = true;
    try {
      // タイトルの重複を検査するためのマップ。
      Set<String> testSet = Collections.synchronizedSet(new HashSet<>());
      Iterator<TrackData> it_t;
      it_t = cs.getAllTrackData().iterator();
      while (it_t.hasNext()) {
        TrackData TD = it_t.next();

        final String s;
        if (TD.getTitle() != null) {
          s = TD.getTitle();
          if (testSet.contains(s) == false) {
            testSet.add(TD.getTitle());
            log.info("タイトルは重複していません。 {}", TD.getTitle());
            log.info("正常");
            Ret = Ret & true;
          } else {
            log.info("タイトルが重複しています。  {}", TD.getTitle());
            Ret = Ret & false;
          }
        } else {
          log.info("タイトルがセットされていません。");
          return false;
        }
      }
      log.info("判定結果  {}", Ret);
      return Ret;
    } catch (Exception e) {
      log.error(" エラーです。", e);
      return false;
    }
  }
  private synchronized boolean checkTrack(Iterator<TrackData> it_t) {
    boolean ret = false;

    try {

      while (it_t.hasNext()) {
        TrackData td = it_t.next();
        log.info(
            "Track{}(Title= ,{} Performer= {})", td.getNumber(), td.getTitle(), td.getPerformer());
        if (checkstring(td.getTitle()) == true || checkstring(td.getPerformer()) == true) {
          ret = true;
          break;
        }
      }

      log.info("判定結果  {}", ret);
      return ret;
    } catch (NullPointerException e) {
      log.warn("TitleもしくはPerformerが空欄です。");
      return false;
    }
  }