当前位置: 首页 > 知识库问答 >
问题:

单粒豆上的异步Spring

昌山
2023-03-14

我目前对Spring的@Async和单例Bean如何处理并发请求之间的区别感到非常困惑。

我已经阅读了一个非常有见地的解释问题(单例Bean如何服务于并发请求?)。但是我想根据第二个答案进一步扩展。

答案是"简而言之,无状态单例将能够同时服务两个请求,因为它们位于不同的线程中。"

如果这是真的,那么Spring的@Async的意义是什么,Spring的教程(https://spring.io/guides/gs/async-method/)指出:findUser方法用Spring的@Async注释标记,表明它将在单独的线程上运行。?

我说单例bean在不同线程上处理并发请求,而@Async处理跨不同线程处理单个请求的方式,对吗?

如果是这样,如何配置web应用程序使用的线程池?

共有1个答案

咸晨
2023-03-14

一个单例bean可以被许多并行(请求)线程使用。您不会称之为异步。每个并行线程将在一个串行执行路径上执行。

但是,您可能正在执行一个请求,在此请求期间,您希望发送一封电子邮件。这涉及到与邮件服务器对话。您的Java mail API可能会迫使您等待响应—您可能会尝试避免这种情况。然后用@Asnc注释一些“sendmail”方法,Spring将负责启动第二个线程来处理该方法。但是-调用进程不会等待此“异步”任务。

Spring默认使用线程池处理请求处理,以避免构建新线程的成本。我想,对于@Async,您需要自己配置一个线程池(Spring@Async限制线程数)

 类似资料:
  • 我在项目中使用了Spring、Cucumber和Junit。测试运行程序带有注释,因此在运行套件之前,它会创建一个Spring上下文。 我希望Spring将步骤定义类实例化为Springbean,这样我就可以注入依赖项并在步骤中使用它们。可以通过将类声明为来完成。 到现在为止,一直都还不错。问题是Cucumber将再次实例化步骤定义,并且不会使用Spring已经创建的bean和注入的依赖项。 有什

  • 本文向大家介绍jquery中的ajax异步上传,包括了jquery中的ajax异步上传的使用技巧和注意事项,需要的朋友参考一下 找了好久终于在网上找到了ajax异步上传文件的方法,不过网上大多数是php的 ,我改为struts2写的 大同小异,希望对学习java的人有一定的帮助。我上传的是音乐文件。 ajaxfileupload.js这个js文件是主要文件,一定要导入。  jsp页面 ,其中我还做

  • 我正在处理来自TCP套接字的大量事件(每秒10个套接字),因此我使用多线程来处理这些事件。 大多数情况下,这是正确的,但有时会出现这些事件的雪崩,有时我会得到一个ConcurrentModificationException: 12-10 14:08:42.071:E/AndreidRuntime(28135):致命例外:线程-369 12-10 14:08:42.071:E/AndreidRun

  • 我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。

  • 在单处理器(UP)系统中,只有一个CPU内核,因此一次只能执行一个线程。这个执行线程是同步的(它获取队列中的指令列表并逐个运行)。当我们编写代码时,它会编译为一组CPU指令。 我们如何在UP机器上的软件中具有异步行为?一切不都是按照操作系统选择的固定顺序运行的吗? 即使是无序执行的CPU也会产生按程序顺序运行指令的假象。(这与系统中其他内核或设备观察到的内存重新排序不同。在UP系统中,运行时内存重

  • 我有一些代码,它使用的是class的方法,它是异步的。另外,我正在使用微软的单元测试应用程序项目来测试应用程序。 问题是测试框架并没有等待异步代码的运行结束,所以我无法检查它的结果。 如何使用Unit Test App项目测试异步代码?我没有使用异步/等待修改器。