猿问

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

  • 在我的应用程序中,我们有许多客户数据库,每个小时我们都会获得新数据以在该数据库中进行处理

  • 有一个cron可以从该数据库中检查数据并提取数据并

  • 然后创建线程池并开始并行执行30个线程,其余线程存储在队列中

  • 处理所有线程需要几个小时

  • 因此,在执行过程中,如果有新数据到达,则必须等待,因为该cron直到当前执行尚未完成之前,才会拾取这些新到达的数据。

  • 有时我们需要处理优先级数据,但是由于这种情况,客户还需要等待几个小时来处理其数据。

请给我建议避免对新到达的数据进行此等待状态

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

预先谢谢您,
如果不清楚,请告诉我有关此的更多信息


Helenr
浏览 182回答 3
3回答

智慧大石

您可以使用 ExecutorService newCachedThreadPool()使用缓存的线程池的好处:该池在需要时创建新线程,但在可用时重用以前构造的线程。仅当没有可用的线程可重复使用时,才会创建新线程并将其添加到池中。未使用超过六十秒的线程将终止并从缓存中删除。因此,未使用足够长时间的池将不会消耗任何资源。

胡说叔叔

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

慕田峪7331174

对于这个问题,我们正在考虑两种解决方案创建多个线程池,以处理普通和高优先级数据。使用相同的代码创建一个以上的tomcat实例,以处理普通数据和优先级数据但是我不知道哪种解决方案最适合我的情况1或2请给我有关上述解决方案的建议,以便我可以做出决定
随时随地看视频慕课网APP

相关分类

Java
我要回答