常用的异步的方式
- 创建异步线程
这个是最原始的办法,每次创建一个新的线程来运行需要异步执行的任务,任务执行完毕就销毁这前线程。由于线程的创建的开销较大,不建议这种办法。 - 使用异步消息队列
producer往queue里扔任务,然后多个consumer线程从queue里面取出任务并执行。 - 线程池
对第一种方式的优化,由于线程的创建需要系统资源的开销,所以利用线程池来避免线程的频率创建与销毁,而是多次的重复利用这些池子的现有的线程资源来执行任务,方法就是向池里面提交Callable/Future 任务,由线程池调度执行它们。 - Spring 的异步注解@Async,参考 Github
框架也是用了JDK的ExecutorService