1、初入职场,有简单的 Java 开发基础,想要从基础开始学习 Java 多线程开发。
2、有 3-5 年甚至更多开发经验,想要深入了解 Java 多线程开发。
3、学习过多线程,想要了解在实际项目中如何应用。
4、准备跳槽面试,想要全方位,较为深入的学习多线程。
随着 CPU 的发展从提高频率转变为增加内核,如何利用好 CPU 的多核优势,变得日益重要,程序开发中采用多线程来提高效率也变得更为普遍。但多线程是把双刃剑,在提高计算效率的同时,也带来了开发的复杂度,因此需要我们对多线程开发有足够的认知,才能确保多线程程序正确运行。此外,多线程的知识也是面试中必考的知识点,要想拿下理想的职位,对多线程的深入学习是必不可少的。
不知你对多线程开发是否有过这样的困惑: 做了几年 Java web 开发,并没有写过多线程,但开发的软件一样高效、稳定运行,似乎多线程看起来并没有那么重要?其实不然。在你的代码背后,web 容器已经帮你实现了多线程,所有的请求都是单独的线程在并发处理。
多线程在软件领域的应用其实十分普遍,主要原因有如下几点:
避免 CPU 闲置
假如在一个业务操作中包含对另外两个服务的调用,并且没有依赖关系。如果采用单线程,就需要等待第一个服务返回结果后再发出第二个请求,但其实在第一个请求发出后,CPU 就已经空闲了,大量时间花在了等待请求返回上。而如果采用多线程,同时发出两个请求,总的等待时间将会大大缩短。
程序解耦
程序基本上都是由一个个方法的调用所组成。方法 A 返回结果传递给方法 B 继续处理。也可以是方法 A 和方法 B 产生的结果一块传递给方法 C 进一步处理。这其实这就是生产者和消费者。我们通过多线程,可以把逻辑以恰当的力度接耦,一个线程负责生产,另外一个线程负责消费。两个线程互不依赖,并且通过队列起到了缓冲的作用。这就像我们去饭店吃饭,前台负责收费接单,后厨按订单列表进行加工,这是典型的多线程。绝对不会有一个饭馆前台收完钱后,自己再去后厨炒菜。
提升性能
一个人干活和一群人干活哪个更快?答案显而易见,程序也是如此。一般来说,线程越多性能也越好。不过在达到峰值后,再增加线程也不能继续提升性能。举个例子,你的经理让你做工作量评估。你说:我一个人要干十天。经理说:那两个人,5 天能干完吗?你想了想说:应该差不多。经理说:那我给你加 9 个人,1 天能搞定吗?显然这是不行的。
贴近现实世界
我们生活的世界其实就是一个多线程的世界,可以认为每个人都是一个线程。而我们平时所做的绝大多数工作,都是多人完成的,也就是多线程完成。我们做软件设计时,都会参考现实世界中的类似设计。所以多线程是必不可少的设计要素之一。Java 是面向对象的语言,我们的代码都已经面向对象了,为什么我们编写的对象还要以单线程的方式运行呢?所以使用多线程就是这么自然而然的一件事情。更加贴近真实世界,意味着你的设计更加易于理解,并且不会有什么漏洞。
掌握了多线程开发,在必要时运用得当,将会让你的程序在以上几个层面有显著的提升。因此,作为一名开发人员,多线程开发是必备技能。此外,我们使用的开源软件,绝大多数都会用到多线程。学习多线程,对于我们理解开源软件代码将会带来很大的帮助。
多线程开发在 Java 中属于高阶的开发技术,如果能彻底掌握,并且灵活运用。无论是对未来升职或找到理想的工作,都有非常重要的作用。如今的技术面试,多线程知识几乎是必考的。因此,多线程这一关是要必过的。
讲师李一鸣,2006 年毕业于北京航空航天大学后,一直从事 Java 领域的软件开发,有着丰富的开发经验。曾经就职于联想集团,负责全球化系统的研发。后来在法律互联网行业创业,作为核心成员之一开发了多款法律互联网应用。目前作为高级研发顾问,就职于 Thoughtworks。在这里能够把更多的时间投入到技术本身,而这是技术人员的立命之本。业余时间参与了 Apache Pulsar 的中文文档翻译工作。为了增加大家的学习趣味,李一鸣老师亲手绘制了许多生动有趣的漫画插图,并采用现实中的案例进行类比讲解,帮助大家理解学习内容,专栏阅读更加轻松高效。
本专栏采用的结构如下:
1、初入职场,有简单的 Java 开发基础,想要从基础开始学习 Java 多线程开发。
2、有 3-5 年甚至更多开发经验,想要深入了解 Java 多线程开发。
3、学习过多线程,想要了解在实际项目中如何应用。
4、准备跳槽面试,想要全方位,较为深入的学习多线程。
笔者很有见解。写的不错之前没有认真的读读,读了好几次了受益颇多。期待下一个专栏。加油
写的不错呀,果然是大佬
我反而觉得这样的安排挺好的,在深入线程池之前,自己的思路没有被侵染,自己动手来实现一个线程池更能体会其中的精妙之处。当然,这个虽简单但却设计精奥的线程池,着实花了不少时间来理解每一个类的功能,感觉类之间层层相关,需要反复揣摩。
老师 快更那 辛苦了 跟您学到很多 谢谢
嗯,有追剧的快感?,相当精彩!!!
很不错,看了,加深记忆
写的很好,解释得很清楚,谢谢
真心感谢能出漫画版,这样使得新手也能快速入门,感谢
一直对多线程望而却步 这次一定要好好学下来 要不总觉得少了点什么 看完一章还想看 成功的激起了我的好奇心 感谢大大 辛苦编写 看完我一定会有所收获
老师快点更新啊,我的大刀早已饥渴难耐了!
老师讲的多线程一针见血,全力支持!!!!
快快更新 即可难耐
每周二、周四会准时更新,同学们保持好学习的节奏。每篇文章的学习完成后,可以自己写代码实践,也可以自己读一读没有讲到的源代码。或者写写学习笔记,学习就是不断输入再输出的过程。
老师快更新,写的很不错,interrupt 我感觉使用场景很小 还有哪些使用场景呢 yield我感觉根本就没使用场景
老师,加油更新啊
我已经学习了悟空老师的并发实战课,他讲得很好很详细,但是我看这个专栏的内容和实战课内容很多都是一样的,那我还需要学这个专栏吗?这个专栏和实战课有什么区别?
今年刚刚大学毕业参加工作,空余时间在补充自己的知识库。并发编程这方面其实以前也在看,不过网上能找到的免费视频大多数讲的很笼统,复杂的就一笔带过了。希望在学习完这个专栏后能让我掌握到并发编程的艺术。46块钱如果能换这么多知识也是相当划算了,哈哈
老师快更新,太少了 一会就看完了 我预测下一章就是讲 synchronized
希望课程,去你说的一样精彩。不是只停留在表面
老师,这里我有点疑惑,那实现多线程到底有几种方式?那用Timer新建线程的方式算不算呢?
Edingbrugh
业精于勤荒于嬉行成于思毁于随2019
向远之航