gpt4 book ai didi

java - 使用@Async 方法在高负载下使用 Spring Framework

转载 作者:行者123 更新时间:2023-11-30 08:20:43 24 4
gpt4 key购买 nike

我正在构建高度可用且可扩展的 Web 应用程序。它还将处理相当大的负载。

问题是,@Async 方法在 Spring Framework 中如何工作?

我计划使用@Async 方法进行日志记录(将日志发送到某个外部日志记录服务器)。我想知道如果大量线程(即用户)将开始调用这些方法,系统将如何表现?

据我了解,Spring 从线程的执行程序中获取预先创建的线程。但是,如果只有 3 个线程,但同时有 1000 个用户,会发生什么情况?

@Async 方法是否会被阻塞,除非某个线程可用并开始执行该工作?还是将“作业”放入队列,主线程继续按预期运行?

我们将不胜感激任何帮助。

最佳答案

The @Async documentation can be found here.

简而言之,要让@Async 工作,您需要声明一个Executor。此 Executor 将负责执行您的 @Async 注释方法。

在典型的应用程序中,您会声明一个支持线程池的 Executor

当您调用您的@Async 方法时,代理将拦截该调用,创建一个Runnable(或Callable)并将其提交给执行器。然后它会立即返回。所以对 @Async 方法的调用永远不会阻塞。

但是,如果您的 Executor 没有任何可用的线程,即。他们都忙于执行其他提交的任务,您提交的 @Async 任务将保留在队列中,直到线程可用。

关于java - 使用@Async 方法在高负载下使用 Spring Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com