阅读源码之我见

过年后从胜任工作的喜悦中缓过劲来,发现自己在Java之路上只是刚刚入门,于是开始了恶补。最先主要是看书补习基础知识,后来一步步逐渐阅读源码。相对于读书看视频这些直观的知识输出,阅读源码的门槛稍微高了一点,我也浪费了很多时间在阅读源码的门口徘徊,始终不得法而入。在不断地尝试后终于也总结了一些经验,分享出来希望帮助有需要的人。

阅读源码的好处

许多人的学习路线应该与我一致,在学习完java的基础知识之后,迫不及待地扎进源码的海洋之中想要一睹大师们的风采。为什么我们要阅读源码呢?我认为有以下两点好处。1、阅读代码可以帮助我们深入了解内部的实现,看到大牛们如何封装继承多态,如何合理地运用设计模式,如何在开销最小的情况下保证线程安全等等。我们应该感谢开源,大牛们的代码就是一本本活生生的教科书。另一方面,阅读源码可以帮我们解决很多工作中遇到的问题,许多bug都是因为我们对程序细节实现的不了解导致的。如果不知道线程池在核心线程满了之后是先入队还是继续创建线程直到最大线程数,可能就会造成性能上的问题;如果不了解IOC、AOP,可能就无法解决AOP和自己实现BeanPostProcessor做的代理之间可能出现的冲突等等。

阅读源码的方式

我认为源码阅读分为三步,这里以Netty的源码举例。第一步,首先了解一下源码如何使用。可以试着先写一个简单的客户端服务端的demo将Netty跑起来,了解一下基本的功能,常用的API等等。这时可以辅助阅读官方的文档或者买一本快速入门的书籍。会用从来都是阅读源码的基础,如果用都没用过上来就读,一方面很难读懂浪费时间,另一方面有些为了读源码而读源码的舍本逐末。
第二步则是了解源码的背景以及整体架构。我们都知道Netty总体上是对NIO的一个封装,那么NIO是什么?为什么要封装它,解决了什么问题?OIO是什么?NIO相对于OIO又改进了什么?这一连串的问题都需要我们事先进行了解,才会在阅读源码之旅中有所得。除此之外,我们应该从官方的文档或者网上的博客上大体了解Netty的架构,整体组成是怎样以及每个模块负责什么功能,这样会使得我们在阅读源码之时不会一叶障目,陷入细节。
最后就可以开始阅读源码了。阅读源码的好方法有很多,个人比较喜欢一边看博客一边跟着debug,效率很高。还有一点需要注意的是,我们如果想了解Netty,一方面要阅读Netty的源码了解细节实现,另一方面要阅读用Netty进行工业级实现的代码(Dubbo、RocketMQ等)了解Netty正确的打开方式。
说是阅读源码的心得,却主要讲的是阅读源码的铺垫。个人认为这些铺垫一定程度上比阅读源码更重要。

你可能感兴趣的:(阅读源码之我见)