// 定义线程启动时 调用的方法 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(); }