content: package com.ruoyi.common.utils;
  
  import java.util.concurrent.ExecutorService;
  import java.util.concurrent.TimeUnit;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  /**
   * 线程相关工具类.
   * 
   * @author ruoyi
   */
  public class Threads
  {
      private static final Logger logger = LoggerFactory.getLogger("sys-user");
  
      /**
       * sleep等待,单位为毫秒
       */
      public static void sleep(long milliseconds)
      {
          try
          {
              Thread.sleep(milliseconds);
          }
          catch (InterruptedException e)
          {
              return;
          }
      }
  
      /**
       * 停止线程池
       * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
       * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数.
       * 如果仍人超時，則強制退出.
       * 另对在shutdown时线程本身被调用中断做了处理.
       */
      public static void shutdownAndAwaitTermination(ExecutorService pool)
      {
          if (pool != null && !pool.isShutdown())
          {
              pool.shutdown();
              try
              {
                  if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                  {
                      pool.shutdownNow();
                      if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                      {
                          logger.info("Pool did not terminate");
                      }
                  }
              }
              catch (InterruptedException ie)
              {
                  pool.shutdownNow();
                  Thread.currentThread().interrupt();
              }
          }
      }
  }
  