通过 ThreadPoolExecutors 运行并发任务。由于我有 2-3 组任务要做,所以现在有一个ThreadPoolExecutors的映射,并且可以向其中一个发送一组任务。
现在想知道一个池何时完成分配给它的所有任务。它的组织方式是我事先知道任务列表,因此将它们发送到新构建的池中,然后计划开始池/跟踪以了解何时完成。
一种方法是拥有另一个具有 1-2 个线程的池,轮询其他池以了解它们的队列何时为空。如果几次扫描显示它们为空(在轮询之间有第二次睡眠,假设它们已完成)。
另一种方法是子类ThreadPoolExecutor
,通过队列和覆盖进行跟踪,afterExecute(Runnable r, Throwable t)
以便可以准确地知道每个任务何时完成,很好地显示状态并知道如果一切顺利,一切都完成了。
在哪里有第二个的实现吗?最好有一个监听器可以实现的接口,然后将它们自己添加到子类方法中。
也在寻找一个实现:
要求池在超时内关闭,
如果超时后关闭未完成,则调用
shutdownNow()
如果失败,则获取线程工厂并停止其组中的所有线程。(假设我们设置了工厂并且它使用组或其他方式来获取对其所有线程的引用)
基本上,我们可以尽可能确定地清理池,以便我们可以在应用程序容器中运行它。一些任务调用 selenium 等,因此可以挂起线程。
最后一道防线是重新启动容器(tomcat/jboss),但希望这是最后一道防线。
问题是 - 知道这个的开源实现或任何代码开始吗?