资源简介
课程亮点
你的第一本图文并茂 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 代码:通过实践来解决问题。 - 总结:提炼本节讲解的核心知识点与概括总结,并对下一节内容做铺垫。
资源目录
-代码开始-第1章 Java并发简介
01 开篇词:多线程为什么是你必需要掌握的知识试读
02 绝对不仅仅是为了面试—我们为什么需要学习多线程试读
03 多线程开发如此简单—Java中如何编写多线程程序试读
04 人多力量未必大—并发可能会遇到的问题第2章 Java中如何编写多线程
05 看若兄弟,实如父子—Thread和Runnable详解06 线程什么时候开始真正执行?—线程的状态详解
07 深入Thread类—线程API精讲
08 集体协作,什么最重要?沟通!—线程的等待和通知
09 使用多线程实现分工、解耦、缓冲—生产者、消费者实战
第3章 并发的问题和原因详解
10 有福同享,有难同当—原子性11 眼见不实—可见性
12 什么?还有这种操作!—有序性
13 问题的根源—Java内存模型简介
14 僵持不下—死锁详解
第4章 如何解决并发问题
15 原子性轻量级实现—深入理解Atomic与CAS16 让你眼见为实—volatile详解
17 资源有限,请排队等候—Synchronized使用、原理及缺陷
18 线程作用域内共享变量—深入解析ThreadLocal
第5章 线程池
19 自己动手丰衣足食—简单线程池实现试读
20 其实不用造轮子—Executor框架详解第6章 主要并发工具类
21 更高级的锁—深入解析Lock22 到底哪把锁更适合你?—synchronized与ReentrantLock对比
23 按需上锁—ReadWriteLock详解
24 经典并发容器,多线程面试必备—深入解析ConcurrentHashMap上
25 经典并发容器,多线程面试必备—深入解析ConcurrentHashMap下
26不让我进门,我就在门口一直等!—BlockingQueue和ArrayBlockingQueue
27 倒数计时开始,三、二、一—CountDownLatch详解
28 人齐了,一起行动—CyclicBarrier详解
29 一手交钱,一手交货—Exchanger详解
30 限量供应,不好意思您来晚了—Semaphore详解
第7章 高级并发工具类及并发设计模式
31 凭票取餐—Future模式详解32 请按到场顺序发言—Completion Service详解
33 分阶段执行你的任务-学习使用Phaser运行多阶段任务
34 谁都不能偷懒-通过 CompletableFuture 组装你的异步计算单元
35拆分你的任务—学习使用Fork/Join框架
36 为多线程们安排一位经理—Master/Slave模式详解
第8章 总结
-代码结束-
37 结束语
谢谢分享
学习
谢谢分享
谢谢分享
十分感谢
谢谢分享
谢谢分享
谢谢分享