在大学毕业后的工做期间,从最开始的编写同步代码,到慢慢为了提升系统性能,把一些任务使用异步的方式来处理,从而提升系统的响应时间,那么就会产生一些新的问题,如何监控在异步线程执行的任务的执行状态,是否出现了错误,出现了错误怎么处理,系统建立大量线程又该如何统一管理,这些种种问题都让使我意识到深刻了解异步编程的必要性。html
同步的代码, 在不少状况下, CPU实际上是在等待中度过的, 好比等待一个网络链接, 等待MySQL服务器的数据返回异步的代码, 就是把这些等待的时间给充分利用起来了, 把网络链接, 访问数据库这种耗时的工做时都在注册一个callback或者event以后切换出来,让CPU先去干别的活(例如响应别的请求), 当网络链接,数据库返回结果时再回来执行刚才的callback中的代码,异步的代码能够大大的提高系统的容量上限, 由于充分利用了空闲的CPU时间, 可是对于单个的请求的性能提高帮助比较有限 (除非你的单个请求大量依赖这种IO操做)。程序员
Java的异步编程实际上是一个充分利用计算机CPU资源,不想让主程序阻塞在某个长时间运行的任务上,这类耗时的任务能够是IO操做、远程调用以及高密度计算任务。若是不使用多线程异步编程,咱们的系统就会阻塞在耗时的子任务上,会致使极大延长完成主函数任务的时间。Java以及提供了丰富的API,来完成多线程异步编程。从NIO、Future,CompletableFuture、Fork/Join以及parrallelStream。另外google的guava框架提供了ListenableFuture和Spring的@Async来简化异步编程。面试
在我来到如今这家公司的时候,老大就安排我一个任务,要我对线程池进行监控,若是线程执行失败,须要记录下来,并发送送通知,其实那时候我对异步编程的理解仅仅是new Thread()的阶段,对于线程池的概念都还很模糊,好几回面试的时候面试官问我,建立线程池有多少中方式,说说线程的特性,那时候我都是一脸懵逼的,话说回来,为了解决老大交给的这个任务,我开始阅读一些资料来对增强对异步编程的理解,一步一步调试查看ThreadPoolExecutor的源码,不断尝试在哪些环节能够加入监控,最终本身实现了一个可监控的ThreadPoolExecotor,让线程执行再也不不可知,也不用再手动的去恢复线程执行失败的数据,那时候线程执行失败彻底不知道,全靠线上日志一点一点排查,真的是心塞,从这个事情以后,对于异步编程的也有了一些初步的了解,也醉心于其中的研究。因而在空闲之余又研究了ForkJoin框架,对于这个新东西,使用起来真的是大大的提升效率,一样的本身实现了一个可监控的ForkJoin,对递归处理的第一个错误进行捕获,而且暴露函数式接口,来针对执行失败的回滚处理。在整个对异步编程的学习过程当中,收获了许多,也但愿能够阅读更多的资料来加强实战能力,这时候一本实战的异步编程的书籍就显得尤为重要了。数据库
异步编程是高性能程序的利器,同时也是程序员面临的挑战之一,要想写出优秀的异步编程代码,既须要对异步编程的原理有深入的理解,也须要对各类异步编程框架有全面的掌握。以前有幸读过加多老师编写的Java并发编程之美,其通俗易懂的讲解方式帮助我完成多线程并发编程从入门到实践的飞跃!并且经过许多案例来加深对并发编程的理解,实乃居家旅行的必备书籍。如今加多老师又出了《Java异步编程实战》这本书,深刻剖析了Java、go语言编程,如今对于异步编程的书籍并很少,相信经过阅读此书,可让你对异步编程的理解更上一层楼。编程
《Java异步编程实战》针对各类常见异步编程场景,从编程语言、开发框架等角度深刻讲解了异步编程的原理和方法。做者是淘宝的资深Java技术工程师,在Java异步编程、并发编程领域有深厚的积累。整本书由浅入深,首先介绍了异步编程的概念、适用场景,以及如何使用线程和线程池来实现异步编程;再讲解JDK中的各类Future及其内部实现原理,而后讲解如何使用Future实现异步编程,以及如何结合JDK8 Stream 和Future实现异步编程;以及对Spring框架中提供的异步执行能力进行详细分析,包含Spring中如何对TaskExecutor进行抽象,如何使用注解@Async实现异步编程,以及其内部实现原理;最后讲解了最近比较热门的反应式编程相关的内容,包含什么是反应式编程,如何使用反应式编程规范的库RxJava和Reactor库实现异步编程,看到这里赶忙点击下面的连接买起来吧。服务器
当当购买连接:http://product.dangdang.com/28499408.html<br/>
网络