我有一个 5 个线程池,我将其保存在数组中:
private static final Collection<Thread> workerThreads = new ArrayList<Thread>();
但是当我重新上传我的 osgi 插件时,线程继续运行,但数组将为空,因此它将填充新的 5 个线程。所以最终我有大量的线程在运行。
我的线程池设计为永远运行,它们只是保持空闲并等待作业进入队列。
while (!queue.isEmpty()) {
try {
Job takenJob = queue.poll(5000, TimeUnit.MILLISECONDS);
if (takenJob != null) {
takenJob.execute();
}
} catch (InterruptedException e) {
log.error("ERROR", e);
}
}
所以基本上问题是,在我重新上传我的 osgi 项目后,我将失去对旧线程的引用。
可能的解决方案:我需要为线程定义一个生命周期,所以我没有一个池,但每个线程将存活约 15 分钟然后结束。同时,每 15 分钟创建一个新线程,所以我总会有一些线程查看队列。
仅使用标准java.util.Date getTime()
似乎不是最好的方法。有什么建议如何实施吗?