Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果对CompletableFuture.runAsync()调用过多,会发生什么情况?_Java_Concurrency_Completable Future - Fatal编程技术网

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

Java 如果对CompletableFuture.runAsync()调用过多,会发生什么情况?,java,concurrency,completable-future,Java,Concurrency,Completable Future,因此,我面临着这样一种情况:我正在编写一个java应用程序来对某些事件做出反应。需要处理收到的每个事件,处理可能需要一些时间。因此,我的应用程序基本上执行以下操作: 它接收事件 它调用CompletableFuture.runAsync(()->EventProcessor.process(event)) i、 e 我的问题是: 如果我收到大量事件,会发生什么?因为处理事件可能需要一些时间(例如10分钟) 如何管理和安排后台任务?他们会被杀吗?如果是,如何控制计划/终止行为 如果我收到大量

因此,我面临着这样一种情况:我正在编写一个java应用程序来对某些事件做出反应。需要处理收到的每个事件,处理可能需要一些时间。因此,我的应用程序基本上执行以下操作:

  • 它接收事件
  • 它调用
    CompletableFuture.runAsync(()->EventProcessor.process(event))
i、 e

我的问题是:

  • 如果我收到大量事件,会发生什么?因为处理事件可能需要一些时间(例如10分钟)
  • 如何管理和安排后台任务?他们会被杀吗?如果是,如何控制计划/终止行为
如果我收到大量事件,会发生什么?因为处理事件可能需要一些时间(例如10分钟)

新任务会占用一些内存,因此可能会发生OutOfMemoryException。 然后,它们被排到执行者的队列中。排队时,如果执行器的输入队列大小有限,则可以抛出RejectedExecutionException

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

如果任务成功提交,它将在更早或更晚的时间执行。只有您可以显式取消它。当然,如果您提交1000个10分钟的任务,您可以将结果等待几天。

如果我收到大量事件,会发生什么?因为处理事件可能需要一些时间(例如10分钟)

新任务会占用一些内存,因此可能会发生OutOfMemoryException。 然后,它们被排到执行者的队列中。排队时,如果执行器的输入队列大小有限,则可以抛出RejectedExecutionException

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


如果任务成功提交,它将在更早或更晚的时间执行。只有您可以显式取消它。当然,如果您提交1000个10分钟的任务,您可以将结果等待几天。

From:“所有没有显式执行器参数的异步方法都是使用”执行的,最有可能的是,一些提交的任务在其他任务完成之前不会执行,从而释放线程池中的线程。From:“所有没有显式执行器参数的异步方法都使用”最有可能的是,一些提交的任务在其他任务完成之前不会执行,从而释放线程池中的线程。
如果执行器的输入队列大小有限
如何控制队列的大小?请为您自己的执行器准备无限队列。LinkedBlockingQueue是您的最佳选择。请参见,w如果未指定执行器,则使用公共
ForkJoinPool
,并在结尾处显示:“此实现仅在池关闭或内部资源耗尽时才拒绝提交的任务(即通过抛出RejectedExecutionException)。(并且公共池无法关闭).
如果执行器的输入队列的大小受到限制
如何控制队列的大小?为您自己的执行器准备无限队列。LinkedBlockingQueue是您的最佳选择。如中所述,当未指定执行器时,将使用公共
ForkJoinPool
,并在结尾处显示:“此实现仅在池关闭或内部资源耗尽时才拒绝提交的任务(即通过抛出RejectedExecutionException)。”(并且无法关闭公共池)。
Class EventHandler implements Handler {

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

}