畅聊Java异步编程


趁着阿里的“加多”大佬推出了自己的新书《Java异步编程实战》,我也来简单聊下自己对异步编程的了解吧。

我是如何接触到异步编程的呢?

目前,我其实是一个刚入职场不久的年轻人,对于异步编程的了解和使用有限。在实际的工作中使用最多的异步编程,就是创建一个线程池来执行一个异步任务,使得主线程可以继续往下执行,不被阻塞。那么,我是如何接触到异步编程技术的呢?

一切还得从3年前,那个“腥风血雨”的校园招聘说起。相信大多数的小伙伴都是从接触Java并发编程开始的,当然我也不另外。在校园招聘的时候,为了应对面试官,通过面试环节,我对JUC并发包中的内容进行了比较详细的背诵,对于一些知识点都“朗朗上口”,就问你强不强?

在校园招聘期间,我对线程池有了一定的理论了解,知道线程池可以执行一些异步任务,并且对于Future可以用来获取异步任务的执行结果也都有所耳闻。在面试期间,我也会给面试官进行解析(背诵)这些知识点,嘿嘿。

工作之后,都在什么场景下使用异步编程呢?

其实吧,我在实际工作中需要使用异步编程的场景不太多,一般情况下我们所执行的任务还是比较重要的,所以都要求同步来执行(不知道是不是技术不够,导致影响了效率都不清楚,尴尬.jpg)。

工作中,使用异步编程的场景大概就是客户端请求服务端一个接口,服务端做不到在短时间内返回该结果。所以,服务端启动了一个异步任务(线程)去执行该请求的具体任务,该请求可以直接返回。然后,客户端可以在一段时间内来重新获取服务端异步线程执行的结果。这些异步编程的使用场景都感觉很简单?但是异步编程应该不止于此,否则“加多”大佬也不会写出如此一部技术书籍,感觉是自己“菜是原罪”。

实际工作中,关于异步编程有疑惑吗?

有,必须有。还真是巧了,这段时间关于异步编程的使用场景,我还真的遇到了一个令我困惑的地方。大概的场景描述如下:

  • 客户端A在调用服务端B的一个接口1,服务端B的接口完成了第一步处理逻辑之后,已经得到了客户端A想要的结果。按照正常来说,这个时候可以返回结果。然后客户端A会接着请求服务端C的接口2。
  • 但是服务端B在处理完逻辑之后,还需要调用一个外部接口2,并且将结果插入数据库。
  • 服务端C在处理请求的过程中,最好是让其使用到刚刚插入数据库中的数据。

看起来,这就是一个典型的异步编程技术使用的场景吧?

但是,服务端B在处理完逻辑之后,调用一个外部接口2如果采用了异步方式。会存在当客户端后续请求服务端C的时候,这个外部接口返回的数据还没有被写入数据库,导致预期数据丢失

如果采用同步方式调用外部接口2呢?会存在客户端请求服务端B接口超时问题(因为额外同步调用外部接口超时导致)。

如果外部接口的调用刚好还是有代价的,比如是收费接口,那么我们通过收费接口获取的数据在异步方式中可能就没有被使用到,亏了;如果是同步方式,接口超时又影响了用户体验,还是不好。

希望在看了加多老师的新书《Java异步编程实战》之后,我可以从中找到一些解决思路。

Java异步编程实战》有哪些干货?

Java异步编程实战》一书对Java中相关的异步编程技术进行归纳总结,为读者提供一个统一文档来查阅、参考。该书也是国内首本异步编程著作,作者全面解析Java异步编程,针对各种常见异步编程场景,从编程语言、开发框架等角度深入讲解了异步编程的原理和方法。

看了这本书的目录和介绍,应该挺适合我们想要深入研究Java异步编程相关技术的同学。希望大家可以从《Java异步编程实战》一书中得到一些Java异步编程方面的启发,对Java异步编程技术有了一个更好的理解与掌握(期待.jpg)。

最后,我给大家一个便捷购买入口吧,新书首发,大家敬请期待吧~

购买链接:https://item.jd.com/12778422.html 畅聊Java异步编程_第1张图片

你可能感兴趣的:(程序人生)