由于我不关心响应,也不关心这些任务产生的任何异常,所以我选择使用ExecutorService而不是Callable或CompletableFuture。
ExecutorService executorService =
Executors.newFixedThreadPool(2, new CustomizableThreadFactory("-abc-"));
然后,对于我在controller中接收到的传入请求,运行两个for循环,并将这些任务分配给ExecutorService:
for (final String orderId : orderIds) {
for (final String itemId : itemIds) {
exec.execute(new Runnable() {
public void run() {
try {
//call database operation
}catch(Throwable t) {
logger.error("EXCEPTION with {} , {}" ,orderId,itemId
)
}
});
}//for
}//for
我的问题是关于关闭ExecutorService。我知道优雅关机(shutdown)、混合关机(awaitTermination)或突然关机(shutdownNow)
对于rest api应用程序,这三种方法中的首选方法是什么?
另外,对于可以创建的线程池的数量是否有任何限制,因为创建的ExecutorService线程池的数量将由传入请求的数量驱动
我们目前有类似的要求,这是一个很难解决的问题,因为你想要使用正确的锤子,如果你愿意。对于编排长时间运行的流程,有非常重要的解决方案,例如SpringBatch。
不过,首先,不要费心停止并启动ExecutorService。那个类的全部要点是把线程管理的重担从您的手中卸下,因此您不需要自己创建和停止线程。所以你不需要管理经理。
但要小心你的方式。而不需要使用队列或其他负载平衡技术来巧妙地平衡应用程序中跨实例的长时间运行的进程。或者管理线程死亡时发生的事情,您可能会陷入麻烦的世界。通常,我会说,现在直接与线程或线程池交互并使用更高级的解决方案来解决这类问题没有多大意义。
问题内容: 在我的webapp中,我创建了一个使用固定大小的ThreadPool的服务。我在整个应用程序生命周期中都重复使用了相同的代码。 所有人都在Tomcat中运行,这在关闭时给我以下错误: 我确实意识到我需要在关闭tomcat之前先关闭ExecutorService。Soms SO线程已经在谈论这一点,但是我找不到一种干净的方法来解决这个问题。 是否应该在正常关闭线程和执行器的情况下使用建议
我在springboot应用程序中使用webclient来调用外部restful web服务。间歇性地获取此异常。 在收到此异常之前,我在日志中看到以下警告。 这是完整的堆栈跟踪: 这是MessageServiceImpl.java 这里是客户端组件类 在下面的配置中,我在SSLContext中添加了信任存储。 下面是应用程序属性文件 我已经尝试通过下面链接中给出的解决方案来解决这个问题,但是没有
问题内容: 我正在将Hibernate升级到最新版本。我的年纪不大,但是升级时,SessionFactory似乎不再关闭。 这是我的 新 类: 这是我的 老 班级: 这是我的 hibernate.cfg.xml : 我在其中创建会话的代码: 主要方法: 问题答案: 没错,Hibernate 4.3.x中似乎存在一个错误,该错误中,由Hibernate的默认连接池生成的线程在关闭时不会被清除。我在这
问题内容: 以下站点显示了通过JDBC使用新的“ AutoClosable”功能:link。该站点显示了如何自动关闭该语句,但是结果集不在自动关闭该语句的try()节中。因此,我的问题是,是否不需要在Java 7中直接关闭ResultSets?我一直使用这种模式:关闭结果集,关闭语句,关闭连接。 问题答案: 从ResultSet的Javadoc中: 当关闭,重新执行或用于生成多个结果序列中的下一个
在我的webapp中,我创建了一个使用具有固定大小线程池的的服务。我在整个应用程序生命周期中重用相同的。 All在Tomcat中运行,在关闭时出现以下错误: 我确实意识到在关闭tomcat之前需要关闭ExecutorService。Soms所以线程已经谈到了这一点,但我找不到一个干净的方法来处理这一点。 我是否应该使用,就像@tim-bender建议的那样,在优雅地关闭线程和执行器?还是应该使用C
问题内容: 具有单个节点的集群: betwwen和有什么不一样 和 ? 从Java正常关闭节点/集群的推荐方法是什么? 问题答案: 上述两个操作具有相同的效果。区别可能是它们影响的节点。 随着你关闭了自己的节点,从您的应用程序,它可以是你,如果你嵌入在应用程序中elasticsearch集群,或者只是一个客户端节点的唯一节点开始是通过Java API连接到外部集群(传输端口)。 使用节点关闭api