如果对CompletableFuture.runAsync的调用过多,会发生什么情况?

问题描述

因此,我面临着编写Java应用程序以响应某些事件的情况。每个收到的事件都需要处理,处理可能需要一些时间。所以我的应用程序基本上会执行以下操作:

  • 它接收事件。
  • 它调用CompletableFuture.runAsync(() -> EventProcessor.process(event));

Class EventHandler implements Handler {

   public void handleEvent(Event event) {
      CompletableFuture.runAsync(() -> EventProcessor.process(event));
   }

}

我的问题是:

  • 如果我收到很多事件怎么办?由于处理事件可能需要一些时间(例如10分钟)
  • 如何管理和安排后台任务?他们会被杀死吗?如果是,如何控制调度/终止行为?

解决方法

如果我收到很多事件会怎样?由于处理事件可能需要一些时间(例如10分钟)

新任务占用一些内存,因此可能发生OutOfMemoryException。 然后,将他们排队到执行器中。排队时,如果执行程序的输入队列大小受限制,则可能引发RejectedExecutionException。

如何管理和安排后台任务?他们会被杀死吗?如果是,我如何控制调度/终止行为?

如果任务提交成功,它将在稍后的时间执行。只有您可以明确取消它。当然,如果您提交1000个10分钟的任务,则可以将结果等待几天。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...