使用@Async方法在高负载下运行Spring Framework

时间:2014-09-15 14:55:46

标签: java multithreading spring asynchronous

我正在建设高度可用的&可伸缩的Web应用它还将处理相当大的负载。

问题是,@Async方法如何在Spring Framework中运行?

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

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

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

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

The @Async documentation can be found here.

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

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

当您调用@Async方法时,代理会拦截调用,创建Runnable(或Callable)并将其提交给Executor。然后它会立即返回。因此,对@Async方法的调用永远不会阻塞。

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