需要有关Java线程池执行队列处理的建议

时间:2018-06-22 19:01:55

标签: java multithreading tomcat7 threadpoolexecutor

  • 在我的应用程序中,我们每小时都有大量的客户数据库 获取新数据以在该数据库中进行处理
  • 有一个cron可以从该数据库中检查数据并提取数据,然后
  • 然后创建线程池并开始并行执行30个线程, 其余线程存储在队列中
  • 处理所有线程需要几个小时
  • 因此,在执行过程中,如果有新数据到达,则必须等待,因为此cron 在当前执行之前,将不会拾取此新到达的数据 完成了。
  • 有时我们有要处理的优先级数据,但是由于这种情况, 客户还需要等待几个小时来处理其数据。

请给我建议,避免新进入的数据处于这种等待状态

(我正在使用Java 1.7,tomcat7和SQL Server2012)

先谢谢您
请让我知道,如果不清楚的话,以获取更多信息

3 个答案:

答案 0 :(得分:0)

您的每个线程都应批量处理数据(例如100/1000条记录),并且应按优先级从数据库中选择此记录。每次选择新记录以处理优先级最高的数据时,都将排在第一位。

我还不能创建评论:(

答案 1 :(得分:0)

对于这个问题,我们正在考虑两种解决方案

  1. 创建多个线程池以处理普通线程和高级线程 优先数据。
  2. 使用相同的代码创建一个以上的tomcat实例,以处理正常和优先级 数据

但是我不知道哪种解决方案最适合我的情况1或2

请给我有关上述解决方案的建议,以便我可以做出决定

答案 2 :(得分:0)

您可以使用ExecutorService newCachedThreadPool()

使用缓存的线程池的好处:

如果需要,该池将创建新线程,但如果有可用的话,将重用以前构造的线程。

仅当没有线程可供重用时,才会创建新线程并将其添加到池中。

未使用超过60秒的线程将终止并从缓存中删除。因此,未使用足够长时间的池将不会消耗任何资源。