上周遇到一个高并发问题,我懵了……
在中国,基本每 3 个程序员里,就有 1 个用 Java 作为主要语言,Java 程序员的竞争程度自然不用多说。
现在,很多大型互联网厂商的系统并发量轻松过百万,作为一个 Java 工程师,你必须熟练掌握并发编程,才有更多的机会获得大厂青睐。但并发编程涉及操作系统、内存、CPU、编程语言等多方面能力,非常考验程序员内功,比如:
Java 里的 synchronized、wait()/notify() 到底怎么用?
多线程同步和互斥有哪几种实现方法?
悲观锁和乐观锁有什么区别?
其实,并发编程并不是 Java 特有的语言特性,而是一个通用且成熟的领域。只有站在较高层面,才能系统且有体系地思考问题,比如,上面说过的 synchronized、wait()、notify() 不过是操作系统领域里管程模型的一种实现,Java SDK 并发包里的条件变量 Condition 也是管程里的概念。
单独理解这些知识点自然是管中窥豹,但站在管程这个理论模型的高度,你就会发现这些知识并不难,用起来也更为得心应手。
总的来说,并发编程领域可以抽象成三个核心问题:分工、同步和互斥,如下图所示:
这张图谱出自王宝令,他是京东资深架构师,主导研发了支持高并发处理能力的 API 网关、高性能数据库连接池,以及海量数据归档平台,最近 7 年,他一直从事 Java 开发平台和基础中间件的设计开发工作。
最早认识他,是因为他的《Java 并发编程实战》专栏,那会儿我刚接手一个百万并发量的项目,看到这个课,立马就订阅了。跟着学下来,帮我解决了工作中的不少问题,少踩很多坑。
在专栏中,他建立了一张处理并发问题的全景图,让你从宏观上彻底理解并发问题的本质。
具体一点说,他解析了并发编程的核心原理,讲解 12 个 Java 并发工具类,带你搞懂 9 种最常见的并发设计模式,掌握 4 大经典并发编程实战案例,最终得心应手地解决各种并发难题,同时将这些知识用于其他编程语言,轻松做到举一反三。