예제 #1
0
  // 定义线程启动时 调用的方法
  public void run() {
    ExecutorService es =
        Executors.newFixedThreadPool(
            AppConfigurator.getInstance().getIntConfig("rms.delayWorker.sessionCount", 5));
    while (true) {
      try {
        // 该线程先休眠1分钟
        sleep(1000L);
        // 根据线程开发,判断是否继续执行
        if (shouldStop) break;
        // 迭代该线程集合,取出每个线程
        Iterator<Map.Entry<String, PortalStackFileProcess>> it = sessions.entrySet().iterator();
        while (it.hasNext()) {
          Map.Entry<String, PortalStackFileProcess> m = it.next();
          // 获得每一个线程对象
          PortalStackFileProcess process = m.getValue();
          // 如果该对象不为空,则将该线程的延时时间减一分钟
          if (process != null) {
            process.decDelaSeconds();
            // 判断该线程是否可以执行了,如果为true,则从线程池中删除该线程,并立刻执行该线程
            if (process.isTime()) {
              it.remove();
              es.execute(process);
            }
          }
        }

      } catch (InterruptedException e) {
        e.printStackTrace();
        break;
      }
    }
    es.shutdown();
  }