Spring Boot中如何详细解析Async异步任务执行流程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1229个文字,预计阅读时间需要5分钟。
异步调用是指执行结果不立即返回,而是等待结果后继续执行后续逻辑的调用方式。同步调用则需等待结果返回后再继续执行。通常,我们使用异步操作时,会创建一个线程来执行一段逻辑,执行完毕后线程被丢弃。
异步调用就是不用等待结果的返回就执行后面的逻辑,同步调用则需要等带结果再执行后面的逻辑。
通常我们使用异步操作都会去创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下:
ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(() -> { try { // 业务逻辑 } catch (Exception e) { e.printStackTrace(); } finally { } });
这样的方式看起来没那么优雅,尽管用了java的lambda。在Spring Boot中有一种更简单的方式来执行异步操作,只需要一个@Async注解即可。
@Async public void saveLog() { System.err.println(Thread.currentThread().getName()); }
我们可以直接在Controller中调用这个业务方法,它就是异步执行的,会在默认的线程池中去执行。需要注意的是一定要在外部的类中去调用这个方法,如果在本类调用是不起作用的,比如this.saveLog()。 最后在启动类上开启异步任务的执行,添加@EnableAsync即可。
本文共计1229个文字,预计阅读时间需要5分钟。
异步调用是指执行结果不立即返回,而是等待结果后继续执行后续逻辑的调用方式。同步调用则需等待结果返回后再继续执行。通常,我们使用异步操作时,会创建一个线程来执行一段逻辑,执行完毕后线程被丢弃。
异步调用就是不用等待结果的返回就执行后面的逻辑,同步调用则需要等带结果再执行后面的逻辑。
通常我们使用异步操作都会去创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下:
ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(() -> { try { // 业务逻辑 } catch (Exception e) { e.printStackTrace(); } finally { } });
这样的方式看起来没那么优雅,尽管用了java的lambda。在Spring Boot中有一种更简单的方式来执行异步操作,只需要一个@Async注解即可。
@Async public void saveLog() { System.err.println(Thread.currentThread().getName()); }
我们可以直接在Controller中调用这个业务方法,它就是异步执行的,会在默认的线程池中去执行。需要注意的是一定要在外部的类中去调用这个方法,如果在本类调用是不起作用的,比如this.saveLog()。 最后在启动类上开启异步任务的执行,添加@EnableAsync即可。

