SpringBoot的@Async注释的用法并例子

发布时间 2023-04-02 11:51:40作者: 海边蓝贝壳

在Spring Boot中,@Async注解用于将一个方法标记为异步执行的方法。使用该注解的方法将在一个单独的线程中异步执行,而不会阻塞调用线程。这对于处理需要长时间运行的任务或需要异步处理的任务非常有用。

下面是一个简单的示例:

@Service
public class MyService {

    @Async
    public CompletableFuture<String> doSomething() {
        // 长时间运行的任务
        // ...
        return CompletableFuture.completedFuture("Task completed!");
    }

}

在上面的示例中,doSomething() 方法被标记为异步方法,并返回一个CompletableFuture对象,用于异步结果处理。

可以通过调用CompletableFuture.get()方法获取异步结果:

@RestController
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("/async")
    public String doAsyncTask() throws InterruptedException, ExecutionException {
        CompletableFuture<String> future = myService.doSomething();
        return future.get(); // 等待异步任务完成并返回结果
    }

}

在上面的示例中,doAsyncTask()方法将调用doSomething()方法,并通过调用future.get()方法等待异步任务完成并返回结果。由于doSomething()方法是异步执行的,因此doAsyncTask()方法不会阻塞调用线程,而是立即返回,这使得该方法在等待异步任务完成时可以处理其他请求。