为什么并发编程很重要?
随着接触和负责的系统越来越复杂,我逐渐发现,无论是对于优秀的系统设计,还是对于程序员的成长提高、职业发展,并发编程都是必须要跨过去的“坎”,而一旦你跨过了这道“坎”,便会豁然开朗,原来一切都如此简单,职业发展也会更上一层楼。
1. 并发已经逐渐成为基本技能
流量稍大的系统,随着数据和用户量的不断增加,并发量轻松过万,如果不使用并发编程,那么性能很快就会成为瓶颈。而随着近年来服务器 CPU 性能和核心数的不断提高,又给并发编程带来了广阔的施展拳脚的空间。可谓是有需求,同时又有资源保障,兼具天时地利。
2. 并发几乎是 Java 面试必考的内容
而随着互联网进入下半场,好公司对程序员的要求也水涨船高,各大互联网公司的岗位描述中,并发几乎是逃不掉的关键词,我们举几个来自拉勾网的 JD 实例。
你会发现,Java 高级工程师岗位要求中并发编程几乎成为了必须掌握的技能点,而在面经里涉及的并发编程的知识也数不胜数,本专栏各课时涉及的知识点,也正是各大厂 Java 高级工程师面试的高频考题。
如何学好并发编程
1. Java 编程是众多框架的原理和基础
无论是 Spring、tomcat 中对线程池的应用、数据库中的乐观锁思想,还是 Log4j2 对阻塞队列的应用等,无不体现着并发编程的思想,并发编程应用广泛,各大框架都和并发编程有着千丝万缕的联系。
并发编程就像是地基,掌握好以后,可以做到一通百通。
2. 并发的知识太多、太杂了
常见的并发工具类数不尽数:
例如,线程池、各种 Lock、synchronized 关键字、ThreadLocal、ConcurrentHashMap、CopyOnWriteArrayList、ArrayBlockingQueue、原子类、CountDownLatch、Semaphore,等等,而它们的原理又包括 CAS、AQS、Java 内存模型(JMM)等等。
从刚才那一长串的名字中可以看出,并发工具的数量很多,而且功能也不尽相同,不容易完全掌握。确实,并发涉及的知识点太琐碎了,大家或多或少都学习过一些并发的知识,但是总感觉一直学不完,东一榔头西一棒槌,很零散,也不知道尽头在哪里,导致学完以后,真正能记住的内容却很少。而且如果学到并发底层原理,就不只涉及 Java 语言,更涉及 JVM、JMM、操作系统、内存、CPU 指令等,令人一头雾水。
3. 不容易找到清晰易懂的学习资料
在我学习的过程中,我总是有一种感受,那就是较少有资料能够把 Java 并发编程讲得非常清楚,例如我们学习一个工具类,希望了解它的诞生背景、使用场景,用法、注意点,最后理解原理,以及它和其他工具类的联系,这一系列的内容其实都是我们需要掌握的。
反观现有的网络相关资料,往往水平参差不齐,真伪难辨,而且经常含有错误,如果我们先入为主地接受了错误的观点,那就得不偿失了。
利用“全局思维+单点突破”的理念,建立起并发的知识体系,同时又对各种常见的工具类有深刻认识,以后我们的知识就可以从点到线,从线到面,浑然一体。
学习了本门课,你会有以下收获
1. 你可以建立完整的 Java 并发知识网
通过这门课程,你可以系统地学习 Java 并发编程知识,而不再是碎片化获取,建立起知识脉络后,每一个工具类在我们心中就不再高高在上,而仅仅是我们并发知识体系中的一块块“拼图”,相信你对并发的理解会更深入一个层次。
建立完整的知识网络后,今后即便是遇到新推出的并发工具类,也可以迅速定位到它应处的位置,并且结合已有的知识,很快就能把它掌握。
2. 你可以掌握常用的并发工具类:
课程中包含了实际生产中常用的大多数并发工具类所对应的并发知识,包括线程池、synchronized、Lock 锁,悲观锁和乐观锁、可重入锁、公平锁和非公平锁、读写锁、ConcurrentHashMap、CopyOnWriteArrayList、ThreadLocal、6 种原子类、CAS 原理、线程协作的 CountDownLatch、CyclicBarrier、Semaphore、AQS 框架、Java 内存模型、happens-before 原则、volatile 关键字、线程创建和停止的正确方法、线程的 6 种状态、如何解决死锁等问题。从用法到原理,再到面试常见问题,一次性掌握透彻。
3. 面试中获取 Offer 的利器
本课程的各小节,都是从高频常考的面试问题出发,首先给出对应的参考解答,然后引申出背后所关联的知识。不但能够让你回答好面试官的问题,而且还可以在面试问题的基础上,做进一步的升华,让面试官眼前一亮。
我还会和你分享面试经验和技巧,如何把面试官往我们的思路上“引导”,最终帮助你拿到心仪的Offer,向更高阶的岗位迈进。
可以说并发编程是成为 Java 高级、资深工程师的必经之路。现在几乎所有的程序都或多或少的需要用到并发和多线程,如果你平时只能接触到 CRUD 的项目,想要进一步提高技术水平;或者是长期一线,只是不断地把业务逻辑“翻译”成代码;想要跳槽加薪,面试却屡屡碰壁,那么学习并发将会帮助你突破“瓶颈”,进阶到下一个层级。
希望这个专栏可以让 Java 并发编程这个非常难啃的老大难问题,变得“平易近人”、“通俗易懂”、“一点就通”,希望可以让你体会到“哦,原来如此简单!”的感觉,体会到久违的学习的快乐。