Java 高负载下使用@Async方法的Spring框架
我正在构建高可用性和可伸缩性的web应用程序。它还将处理相当大的负载 问题是,Java 高负载下使用@Async方法的Spring框架,java,multithreading,spring,asynchronous,Java,Multithreading,Spring,Asynchronous,我正在构建高可用性和可伸缩性的web应用程序。它还将处理相当大的负载 问题是,@Async方法如何在Spring框架中工作 我计划使用@Async方法进行日志记录(将日志发送到一些外部日志服务器)。我想知道如果很多线程(即用户)开始调用这些方法,系统将如何运行 据我所知,Spring从线程的执行器获取预先创建的线程。 但是,如果只有3个线程,但同时有1000个用户,会发生什么呢 @Async方法是否会被阻止,除非某些线程可用并开始执行该作业? 或者“作业”将被置于队列中,主线程将继续按预期运行
@Async
方法如何在Spring框架中工作
我计划使用@Async
方法进行日志记录(将日志发送到一些外部日志服务器)。我想知道如果很多线程(即用户)开始调用这些方法,系统将如何运行
据我所知,Spring从线程的执行器获取预先创建的线程。
但是,如果只有3个线程,但同时有1000个用户,会发生什么呢
@Async
方法是否会被阻止,除非某些线程可用并开始执行该作业?
或者“作业”将被置于队列中,主线程将继续按预期运行
我们将非常感谢您的帮助。
简而言之,要使@Async
工作,您需要声明一个执行器。此Executor
将负责执行@Async
带注释的方法
在一个典型的应用程序中,您将声明一个线程池备份执行器
当您调用@Async
方法时,代理将拦截调用,创建可运行的(或可调用的)并将其提交给执行器。然后它将立即返回。因此,对@Async
方法的调用永远不会阻塞
但是,如果您的Executor
没有任何可用线程,即他们都在忙于执行其他提交的任务,则您提交的@Async
任务将保留在队列中,直到有线程可用为止