Preface
前言
为什么要写这本书
2002年的秋天,一个偶然的机会我接触到了计算机编程。我编写的第一个程序成功运行所带来的新奇与成就感,让我对计算机充满了热爱。在高考填报志愿时,我毫不犹豫地选择了计算机,憧憬着未来成为一名出色的工程师。
2021年我36岁生日那天,在与家人聊天的时候,我发现自己在不知不觉中已经与Java“共事”近10年了。在十多年的技术求索之路上,王国维先生的三重人生境界不断激励着我前行:
古今之成大事业、大学问者,必经过三种之境界:“昨夜西风凋碧树,独上高楼,望尽天涯路。”此第一境也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境也。“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”此第三境也。
一个技术人员要想成为一名真正的工匠,就必须耐得住寂寞,经得起时间的考验,并且始终保持内心深处的热爱。
回顾过去十多年的技术之路,我得到了很多师长的提携与指点,受到100多本技术书籍的“滋养”。正所谓“前人栽树,后人乘凉”,我也想为Java社区略尽微薄之力。
十多年来,我一直深耕互联网领域的系统研发,在Java多线程编程方面积累了一定的经验。在工作之余,我也会和技术社区中的朋友交流Java多线程技术,发现很多朋友在技术细节上存在诸多困惑。而目前大部分书籍和资料多以功能介绍为主,很少有剖析Java线程的设计原理的。所以,我决定写一本书,旨在从Linux、JVM、Java多个方面来详细阐述Java线程的技术原理与实现细节。
本书将为读者提供一个全新的视角,秉承“大道至简”的主导思想,只介绍Java多线程开发中最值得关注的内容,致力于底层实现原理的分析,而非API的使用。
本书特色
随着互联网的发展,会有越来越多的公司进行数字化转型。在数字化转型的过程中,高并发、高性能是衡量系统性能的核心指标,越来越多的公司对从业人员的多线程编程能力提出了更高的要求。本书将打通Java、JVM、Linux的全链路技术栈,剖析Java多线程的实现原理,以便读者厘清现象与本质。同时,本书结合实际业务场景沉淀出多线程编程模型,以便读者快速获得多线程编程能力。
本书中的一些实操例子,开发工程师可直接应用于实际业务场景中;设计原理和深入分析的内容,可帮助架构师拓展解决问题的思路;工具和问题分析的内容,可帮助技术人员诊断线上环境中的系统问题。
读者对象
❑ Java开发工程师
❑ 系统架构师
❑ 运维工程师
❑ 并发编程爱好者以及其他对Java技术感兴趣的人员
如何阅读本书
本书从Java多线程基础知识、进阶功能、实际应用三个维度展开讨论,分为三篇,共11章内容。
基础篇(第1~5章),着重讲解Java线程的基础知识、设计原理与具体实现。
第1章 从Linux线程基础出发,详细讲解Linux系统的进程、线程、任务调度等概念,并详细阐述Linux线程库Pthread的使用。
第2章 详细讲解JVM的逻辑架构,涵盖JVM的线程模型、JNI访问等组成部件。
第3章 详细讲解Java线程的基本概念、多线程带来的问题、Java内存模型,以及JVM内存屏障的实现、JVM线程的底层实现与生命周期等。
第4章 详细讲解Java线程的睡眠、等待、中断等线程通信机制的设计原理与JVM实现。
第5章 详细讲解Java的synchronized、volatile、CAS等同步控制机制的设计原理与JVM实现。
进阶篇(第6~9章),着重讲解Java多线程的高阶功能的实现原理。
第6章 详细讲解锁的演进过程、Java的AQS设计原理以及常见锁机制的具体实现。
第7章 详细讲解Java的各种原子操作类的设计原理与具体实现。
第8章 详细讲解Java的List、Map、Queue等线程安全的并发容器的设计原理与具体实现。
第9章 详细讲解Java中常见的线程池的设计原理与具体实现。
应用篇(第10、11章),着重讲解Java多线程的常见模型与编程技巧。
第10章 总结Java线程池的几种常见使用模型,以及在业务场景中的实现案例。
第11章 总结多线程编程中的常见问题,并给出应对这些问题的编程技巧。
其中,第3~8章为本书的重点章,如果你没有充足的时间完成全书的阅读,可以选择阅读这些重点章。如果你是一名初学者,请在开始本书阅读之前,先学习一些Java多线程的基础理论知识。
勘误和支持
由于写作水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,可以通过微信sky_ccy与我沟通。同时,你也可以通过邮箱easyjavathread@gmail.com与我联系。期待得到你的真挚反馈,让我们在技术之路上互勉共进。
致谢
感谢知名操作系统专家彭东,他帮忙审校了第1章,并对该章内容提出了一些非常中肯的建议。
特别感谢我的太太林燕女士、女儿可歆和儿子乔治,我为写作这本书牺牲了很多陪伴他们的时间,但也正因为有了他们的付出与支持,我才能坚持写下去。
同时,感谢在我成长路上帮助过我的领导、师长、朋友,是他们的指导让我成了更好的自己。
谨以此书献给我最亲爱的家人,以及众多热爱Java技术的朋友们!
储诚益