在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()
方法不会阻塞调用线程,而是立即返回,这使得该方法在等待异步任务完成时可以处理其他请求。