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

时间:2020-09-14 14:32:05

标签: java concurrency completable-future

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

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

Class EventHandler implements Handler {

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

}

我的问题是:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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