今儿和大家聊聊并发。


虽然搞了多年Java,可许多朋友一提到“并发”就头疼:

为什么我已经学习了很多相关技术,可还是搞不定并发编程?

小公司根本遇不到并发问题,高并发经验该怎么积累?平时该怎么学习?

昨天面试又卡在并发问题上了,并发编程难道已经成为大厂必备的敲门砖了吗?


有这些困惑很正常,因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,而这些知识点看上去非常的零散、独立,可实则关联性又比较强,更为考验一个程序员的内功。


所以,并发编程相关的问题经常出现在大厂的面试题里也就不奇怪了。比如说多线程同步和互斥有哪几种实现方法?悲观锁和乐观锁有什么区别?这些面试问题本身都是想考察应聘者的基础能力。同样,随着互联网行业的快速发展,高并发也成为了家常便饭,工作中,你总是绕不开并发编程的任务,比如说,你想写个程序,一边从文件中读取数据,一边还要做实时计算.....


并发编程的优势是可以提高程序的执行效率和资源利用率,短板和难点是它会涉及线程通信、同步互斥等等相关问题。那我们应该怎么学习并发编程呢?是不是一上来就去看Java SDK的并发包?然后死记硬背他们的使用场景?有没有一张“全景图”?


说实话,时至今日也还没有一张普遍认可的“并发编程”全景图,但下面这张图,看到的时候却是让我眼前一亮,是由资深架构师王宝令凝聚他十几年经验制成的,从三个核心问题:分工、互斥、协作,全面且系统地涵盖了Java并发编程的技术难点。


对想系统性学习并发编程的朋友来说,这简直就是福音,建议你果断保存下来。

高并发经验该怎么积累?_并发编程并发编程全景图之思维导图



更值得关注的是,王宝令在极客时间开设了《Java并发编程实战》专栏,绝对值得一看。正如上面这张思维导图所示,宝令在专栏中,会站在理论、模型的角度讲解Java并发,让你融汇贯通,形成全面系统的并发编程知识体系。最终可以得心应手地解决各种并发难题,同时将这些知识用于其他编程语言。一分辛劳,三分收获。


在这个专栏里,并不会一上来就给你介绍Java SDK并发包中的各个工具,相反,宝令会和你一起挖掘他们背后的设计理念。你知道,这些工具都是并发大师Doug Lea设计的,这背后都隐藏着他对并发问题的深刻认识。有宝令带你解读,你会有意想不到的收获。



王宝令是谁?


王宝令,资深架构师,目前从事电商架构设计工作。他前前后后写了15年的程序,曾任职于用友、金蝶、惠普、东软等公司,设计研发了支持高并发的API网关、数据库连接池以及海量数据归档平台。


他和我说,起初,他对于写这个专栏是心存疑问的,因为市面上已经有很多这方面的书了。但后来,他发现大家对并发的盲点,有时涉及对操作系统的理解,有时又涉及一点硬件知识,非常复杂。如果要推荐相关图书,可能要推荐好几本,有点“大炮打蚊子”的感觉,效率很差。同时图书更追求严谨性,也因此失掉了形象性,大家阅读的过程就会比较艰辛。


于是有了这个专栏《Java并发编程实战》,就是为了解决上面的问题。


我为什么极力推荐这个专栏?


1、非常落地,带你掌握解决并发问题的关键


看了目录,这个专栏分别用了一整个模块的内容来讲解12 个Java并发工具类,及9 种最常见的并发设计模式。


比如Java SDK并发包,它提供了非常丰富的功能,但对于初学者来说可谓是眼花缭乱,好多人觉得无从下手。宝令会探讨Java SDK里的12个主流并发工具类,包含隐藏在并发包中的管程,以及如何使用,还有详细解读信号量、读写锁、CountDownLatch和CyclicBarrier等等内容。


还有就是并发设计模式,它是解决并发问题最佳实践的总结,必然是重中之重的内容。前3种设计模式的核心思想是避免共享变量,从而避免并发问题;后面6种设计模式则都属于典型的分工模式。宝玉都会一一详解,让大家搞懂并掌握解决并发问题的关键。


2、最吸引我的是专栏后面的「四大经典并发编程实战案例解析」,即学即用


这4个经典的开源框架分别是:高性能限流器Guava RateLimiter、高性能网络应用框架Netty、高性能队列Disruptor和高性能数据库连接池HiKariCP,让你从案例中根本性地了解如何处理并发问题。通过这4个案例的学习,你绝对会对如何解决并发问题有更深入的认识。


另外,极客时间我不止一次推荐过,平台内容以及讲师都非常厉害。吸收他人的经验,提高自己“解决问题”的能力,无疑是个人成长和提升职场竞争力的最快方式。