Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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 高负载下使用@Async方法的Spring框架_Java_Multithreading_Spring_Asynchronous - Fatal编程技术网

Java 高负载下使用@Async方法的Spring框架

Java 高负载下使用@Async方法的Spring框架,java,multithreading,spring,asynchronous,Java,Multithreading,Spring,Asynchronous,我正在构建高可用性和可伸缩性的web应用程序。它还将处理相当大的负载 问题是,@Async方法如何在Spring框架中工作 我计划使用@Async方法进行日志记录(将日志发送到一些外部日志服务器)。我想知道如果很多线程(即用户)开始调用这些方法,系统将如何运行 据我所知,Spring从线程的执行器获取预先创建的线程。 但是,如果只有3个线程,但同时有1000个用户,会发生什么呢 @Async方法是否会被阻止,除非某些线程可用并开始执行该作业? 或者“作业”将被置于队列中,主线程将继续按预期运行

我正在构建高可用性和可伸缩性的web应用程序。它还将处理相当大的负载

问题是,
@Async
方法如何在Spring框架中工作

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

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

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

我们将非常感谢您的帮助。

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

在一个典型的应用程序中,您将声明一个线程池备份
执行器

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

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