content: /*
   * Latke - 一款以 JSON 为主的 Java Web 框架
   * Copyright (c) 2009-present, b3log.org
   *
   * Latke is licensed under Mulan PSL v2.
   * You can use this software according to the terms and conditions of the Mulan PSL v2.
   * You may obtain a copy of Mulan PSL v2 at:
   *         http://license.coscl.org.cn/MulanPSL2
   * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
   * See the Mulan PSL v2 for more details.
   */
  package org.b3log.latke.util;
  
  import java.util.concurrent.locks.Lock;
  import java.util.concurrent.locks.ReentrantLock;
  
  /**
   * Id utilities.
   *
   * @author <a href="http://88250.b3log.org">Liang Ding</a>
   * @version 1.0.0.3, Sep 29, 2011
   */
  public final class Ids {
  
      /**
       * Lock for unique id generation.
       */
      private static final Lock ID_GEN_LOCK = new ReentrantLock();
  
      /**
       * Sleep millisecond.
       */
      private static final long ID_GEN_SLEEP_MILLIS = 50;
  
      /**
       * Private constructor.
       */
      private Ids() {
      }
  
      /**
       * Gets current date time string.
       *
       * <p>
       * <b>Note</b>: This method is not safe in cluster environment.
       * </p>
       *
       * @return a time millis string
       */
      public static synchronized String genTimeMillisId() {
          String ret;
  
          ID_GEN_LOCK.lock();
          try {
              ret = String.valueOf(System.currentTimeMillis());
  
              try {
                  Thread.sleep(ID_GEN_SLEEP_MILLIS);
              } catch (final InterruptedException e) {
                  throw new RuntimeException("Generates time millis id fail");
              }
          } finally {
              ID_GEN_LOCK.unlock();
          }
  
          return ret;
      }
  }
  