
什么是Spring Boot中的@Async
异步方法
随着硬件和软件的高度发展,现代应用变得更加复杂和要求更高。由于
Spring中的@Async是什么?
Spring 中的 @Async 注解支持方法调用的异步处理。它指示框架在单独的线程中执行该方法,允许调用者继续执行而无需等待该方法完成。这
要使用@Async,您必须首先通过将@EnableAsync注释添加到配置类来在应用程序中启用异步处理:
接下来,用@Async注解来注解你想要异步执行的方法:
@Async 与多线程和并发有何不同?
有时,区分多线程和并发与并行执行可能会让人感到困惑,但是,两者都与并行执行相关。他们每个人都有自己的用例和实现:
@Async 注解是 Spring 框架特定的抽象,它支持异步执行。它提供了轻松使用异步的能力,在后台处理所有艰苦的工作,例如线程创建、管理和执行。这使用户能够专注于业务逻辑而不是底层细节。多线程是一个通用概念,通常指操作系统或程序同时管理多个线程的能力。由于 @Async 帮助我们自动完成所有艰苦的工作,在这种情况下,我们可以手动处理所有这些工作并创建一个多线程环境。 Java 具有Thread和ExecutorService等必要的类来创建和使用多线程。并发是一个更广泛的概念,它涵盖多线程和并行执行技术。它是
综上所述,@Async是一种更高层次的抽象,它为开发人员简化了异步处理,而多线程和并发更多的是手动管理并行执行。
何时使用 @Async 以及何时避免它。
使用异步方法似乎非常直观,但是,必须考虑到这种方法也有注意事项。
在以下情况下使用@Async:
您拥有可以并发运行的独立且耗时的任务,而不会影响应用程序的响应能力。您需要一种简单而干净的方法来启用异步处理,而无需深入研究低级线程管理。
在以下情况下避免使用 @Async:
您想要异步执行的任务具有复杂的依赖性或需要大量的协调。在这种情况下,您可能需要使用更高级的并发 API,例如CompletableFuture或反应式编程库,例如 Project Reactor。您必须精确控制线程的管理方式,例如自定义线程池或高级同步机制。在这些情况下,请考虑使用 Java 的ExecutorService或其他并发实用程序。
在 Spring Boot 应用程序中使用 @Async。
在此示例中,我们将创建一个简单的 Spring Boot 应用程序来演示 @Async 的使用。
创建一个具有最低依赖要求的新 Spring Boot 项目:
将 @EnableAsync 注释添加到主类或应用程序配置类(如果我们使用它):
对于最佳解决方案,我们可以做的是,创建一个自定义 Executor bean 并根据我们的需要在同一个 Configuration 类中对其进行自定义:
通过此配置,我们可以控制最大和默认线程池大小。以及其他有用的定制。
使用 @Async 方法创建 OrderService 类:
我们在这里所做的是创建 3 种不同的异步方法。第一个服务是一个简单的异步
创建一个 REST 控制器来触发异步方法:
现在,当我们访问端点时,服务器将立即返回响应,同时
将 @Async 方法移至单独的服务或组件。使用 ApplicationContext 获取代理并调用其上的方法。
总结
Spring 中的 @Async 注解是在应用程序中启用异步处理的强大工具。通过使用@Async,我们不需要陷入并发管理和多线程的复杂性来增强应用程序的响应能力和性能。但要决定何时使用 @Async 或使用替代并发