为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2021-04-09 14:11:46
在我的应用程序中,我们有许多客户数据库,每个小时我们都会获得新数据以在该数据库中进行处理有一个cron可以从该数据库中检查数据并提取数据并然后创建线程池并开始并行执行30个线程,其余线程存储在队列中处理所有线程需要几个小时因此,在执行过程中,如果有新数据到达,则必须等待,因为该cron直到当前执行尚未完成之前,才会拾取这些新到达的数据。有时我们需要处理优先级数据,但是由于这种情况,客户还需要等待几个小时来处理其数据。请给我建议避免对新到达的数据进行此等待状态(我正在使用Java 1.7,tomcat7和SQL server2012)预先谢谢您,如果不清楚,请告诉我有关此的更多信息
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

您可以使用 ExecutorService newCachedThreadPool()

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

该池在需要时创建新线程,但在可用时重用以前构造的线程。

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

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


查看完整回答
反对 回复 2021-04-21
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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



查看完整回答
反对 回复 2021-04-21
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

  1. 创建多个线程池,以处理普通和高优先级数据。

  2. 使用相同的代码创建一个以上的tomcat实例,以处理普通数据和优先级数据

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

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


查看完整回答
反对 回复 2021-04-21
  • 3 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信