你的第一本图文并茂 Java 并发编程学习指南;
生动有趣的讲师手绘插图辅助讲解,枯燥原理一看即懂;
内容通俗有趣,讲解深入浅出,学习高效无障碍;
代码世界即现实世界,实际案例讲解便于理解掌握;
深入底层源码解析,彻底理解 Java 并发的实现原理;
代码示例结合实战,在实践中掌握 Java 并发的实现技巧。
与实战课程 Java 并发编程精讲的亮点区别:
- 侧重于从原理解析角度进行讲解;
- 侧重于 Java 并发最优设计模式与并发工具选择进行讲解;
- 从原理到代码示例解析,循序渐进,层层深入。
课程简介
随着 CPU 的发展从提高频率转变为增加内核,如何利用好 CPU 的多核优势,变得日益重要,程序开发中采用多线程来提高效率也变得更为普遍。但多线程是把双刃剑,在提高计算效率的同时,也带来了开发的复杂度,因此需要我们对多线程开发有足够的认知,才能确保多线程程序正确运行。此外,多线程的知识也是面试中必考的知识点,要想拿下理想的职位,对多线程的深入学习是必不可少的。
不知你对多线程开发是否有过这样的困惑: 做了几年 Java web 开发,并没有写过多线程,但开发的软件一样高效、稳定运行,似乎多线程看起来并没有那么重要?其实不然。在你的代码背后,web 容器已经帮你实现了多线程,所有的请求都是单独的线程在并发处理。
多线程在软件领域的应用其实十分普遍,主要原因有如下几点:
- 避免 CPU 闲置
假如在一个业务操作中包含对另外两个服务的调用,并且没有依赖关系。如果采用单线程,就需要等待第一个服务返回结果后再发出第二个请求,但其实在第一个请求发出后,CPU 就已经空闲了,大量时间花在了等待请求返回上。而如果采用多线程,同时发出两个请求,总的等待时间将会大大缩短。 - 程序解耦
程序基本上都是由一个个方法的调用所组成。方法 A 返回结果传递给方法 B 继续处理。也可以是方法 A 和方法 B 产生的结果一块传递给方法 C 进一步处理。这其实这就是生产者和消费者。我们通过多线程,可以把逻辑以恰当的力度接耦,一个线程负责生产,另外一个线程负责消费。两个线程互不依赖,并且通过队列起到了缓冲的作用。这就像我们去饭店吃饭,前台负责收费接单,后厨按订单列表进行加工,这是典型的多线程。绝对不会有一个饭馆前台收完钱后,自己再去后厨炒菜。 - 提升性能
一个人干活和一群人干活哪个更快?答案显而易见,程序也是如此。一般来说,线程越多性能也越好。不过在达到峰值后,再增加线程也不能继续提升性能。举个例子,你的经理让你做工作量评估。你说:我一个人要干十天。经理说:那两个人,5 天能干完吗?你想了想说:应该差不多。经理说:那我给你加 9 个人,1 天能搞定吗?显然这是不行的。 - 贴近现实世界
我们生活的世界其实就是一个多线程的世界,可以认为每个人都是一个线程。而我们平时所做的绝大多数工作,都是多人完成的,也就是多线程完成。我们做软件设计时,都会参考现实世界中的类似设计。所以多线程是必不可少的设计要素之一。Java 是面向对象的语言,我们的代码都已经面向对象了,为什么我们编写的对象还要以单线程的方式运行呢?所以使用多线程就是这么自然而然的一件事情。更加贴近真实世界,意味着你的设计更加易于理解,并且不会有什么漏洞。
掌握了多线程开发,在必要时运用得当,将会让你的程序在以上几个层面有显著的提升。因此,作为一名开发人员,多线程开发是必备技能。此外,我们使用的开源软件,绝大多数都会用到多线程。学习多线程,对于我们理解开源软件代码将会带来很大的帮助。
多线程开发在 Java 中属于高阶的开发技术,如果能彻底掌握,并且灵活运用。无论是对未来升职或找到理想的工作,都有非常重要的作用。如今的技术面试,多线程知识几乎是必考的。因此,多线程这一关是要必过的。
讲师李一鸣,2006 年毕业于北京航空航天大学后,一直从事 Java 领域的软件开发,有着丰富的开发经验。曾经就职于联想集团,负责全球化系统的研发。后来在法律互联网行业创业,作为核心成员之一开发了多款法律互联网应用。目前作为高级研发顾问,就职于 Thoughtworks。在这里能够把更多的时间投入到技术本身,而这是技术人员的立命之本。业余时间参与了 Apache Pulsar 的中文文档翻译工作。为了增加大家的学习趣味,李一鸣老师亲手绘制了许多生动有趣的漫画插图,并采用现实中的案例进行类比讲解,帮助大家理解学习内容,专栏阅读更加轻松高效。
本专栏采用的结构如下:
- 概念植入:简明扼要说明本节要讲解的概念,首先让读者对要讲解的内容有所认知。并且明白学习本节的重要性;
- 概念分析:详细讲解本节涉及的概念,一般按以下逻辑进行讲解:
2.1 问题:抛出问题;
2.2 解决方案:由问题引出解决方案;
2.3 分析:结合例子、图表进行分析,详细讲解解决方案;
2.4 代码:通过实践来解决问题。 - 总结:提炼本节讲解的核心知识点与概括总结,并对下一节内容做铺垫。