我正在建设高度可用的&可伸缩的Web应用它还将处理相当大的负载。
问题是,@Async
方法如何在Spring Framework中运行?
我打算使用@Async
方法进行日志记录(将日志发送到某些外部日志记录服务器)。我想知道如果很多线程(即用户)开始调用这些方法,系统将如何表现?
据我所知,Spring从线程的执行器中获取预先创建的线程。 但是,如果只有3个线程,但同时有1000个用户会发生什么?
是否会阻止@Async
方法,除非某个线程可用并开始执行该作业?
或者“作业”将被放入队列中,主线程将继续按预期运行?
任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
The @Async
documentation can be found here.
简而言之,要让@Async
工作,您需要声明Executor
。此Executor
将负责执行您的@Async
带注释的方法。
在典型的应用程序中,您将声明一个支持的线程池Executor
。
当您调用@Async
方法时,代理会拦截调用,创建Runnable
(或Callable
)并将其提交给Executor
。然后它会立即返回。因此,对@Async
方法的调用永远不会阻塞。
但是,如果您的Executor
没有任何可用的帖子,即。他们都忙于执行其他提交的任务,您提交的@Async
任务将保留在队列中,直到线程可用。