随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了——如今就连智能手机这样的消费类设备都已配备了4核乃至8核的处理器,更何况商用系统!在此背景下,以往靠单个处理器自身处理能力的提升所带来的软件计算性能提升的那种“免费午餐”已不复存在,这使得多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。故而,掌握多线程编程技能对广大开发人员的重要性亦由此可见一斑。本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。
本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。
黄文海,2004年开始从事软件开发工作,近几年从事软件项目管理工作。在其工作过程中积累了丰富的技术指导经验和企业内部培训经验。曾在InfoQ中文站和IBM developerWorks上发表过十几篇技术、项目管理文章。
前言
随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了——如今就连智能手机这样的消费类设备都已配备了4核乃至8核的处理器,更何况商用系统!在此背景下,以往靠单个处理器自身处理能力的提升所带来的软件计算性能提升的那种“免费午餐”已不复存在,这使得多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。故而,掌握多线程编程技能对广大开发人员的重要性亦由此可见一斑。
本书内容及特色
本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。
脉络清晰、循序渐进和系统性介绍。全书围绕多线程编程所要解决的问题(所要实现的目标)及其面临的各种挑战,由此展开介绍多线程编程中的相关概念、原理与技术。本书以先介绍相关问题及背景再给出相应的解决方案的方式来讲解新的概念、知识。并且,本书对概念、原理与技术的讲解会适当地深入到Java虚拟机、操作系统和硬件这三个层次与角度,而不仅仅停留在Java语言层面。全书章节是按照知识间的内在联系并依照认知程度上的由浅至深的顺序组织的。
以基本概念、原理与方法为主线。本书既注重实战又注重理论对实践的指导作用。本书以多线程编程的基本概念、原理与方法为主线,将Java平台中与多线程编程相关的关键字、Java标准库类(API)等知识串在其上进行讲解,并在讲解过程中适当穿插相关工具的介绍。本书在介绍相关Java标准库类时,不仅仅介绍其API,还适当介绍其内部实现原理与实战注意事项。
辅以丰富的实战案例和生活化实例。本书配有丰富的实战案例,这些案例的配套源码都是可以实际运行的,以便读者进行实验。本书在介绍一些概念和原理的时候往往辅以一些生活化实例以增加读者的感性认识,降低理解难度。
答疑解惑。本书讲解过程中会穿插一些“扩展阅读”的内容,这部分内容以问答的形式来对多线程编程的初学者在学习和工作过程中经常遇到的一些疑惑和问题进行解答。
本书一共分为12章,各章的主要内容如下。
第1章主要介绍线程及多线程编程这两个基本概念,以及Java平台的线程API,并通过一个实战案例使读者对多线程编程有个初步和感性的认识。
第2章主要介绍多线程编程所要实现的目标及其面临的挑战。明确多线程编程的目标有助于我们在实践中做到有的放矢,掌握多线程编程所面临的挑战使得我们在学习本书后续内容时能够做到知其然而且知其所以然。
第3章主要介绍Java平台所提供的能够用于应对多线程编程所面临的部分挑战的一些关键字和标准库类(API),以及这些关键字和API的性能开销、适用场景及注意事项。
第4章通过实战案例介绍具体如何玩转线程以实现多线程编程的目标,并通过这些实战案例展开介绍多线程编程实践中的一些实际问题及应对措施。
第5章主要介绍线程与线程之间通过哪些常见的协作形式来实现多线程编程的目标以及Java所支持的相应标准库类。
第6章主要从软件设计的角度出发介绍应对多线程编程所面临的一些挑战的常见技术。
第7章主要介绍多线程程序可能产生的一些常见的具有隐蔽性的故障以及相应的规避措施。
第8章主要介绍在多线程编程中如何更加有效和有效率地使用线程。
第9章主要从计算模型的角度出发介绍多线程编程中如何利用线程来提高软件的吞吐率和响应性。
第10章主要介绍Java平台中多线程程序的调试技巧与测试手段。
第11章主要介绍多线程编程的硬件基础以及Java平台为屏蔽不同硬件平台的差异而进行的抽象(Java内存模型)。
第12章结合实战案例介绍与Java平台中的多线程程序紧密相关的常用性能优化方法与技术。
目标读者
本书适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。
本书约定
1.对于标题中带星号(*)的小节,读者可以选择先浏览一下章节标题就跳过它,之后在阅读后续内容遇到问题时再回头来阅读相应的小节。
2.斜体格式的方法名表示相应方法为静态方法,例如System.currentTimeMillis()(其中,方法名currentTimeMillis的字体格式为斜体)。非斜体格式的方法名表示相应方法为相应类的实例方法,例如StringBuilder.append(String)或者StringBuilder.append(String str)均表示类StringBuilder的实例方法append。本书有时候也会省略方法中的形式参数列表。
3.本书用“/”作为分隔符来表示同一个类的多个方法。例如,StringBuilder.append (String)/toString()表示StringBuilder的append方法和toString方法。
4.本书所指的Java虚拟机(JVM)如无特别说明均特指Oracle公司的HotSpot Java虚拟机。
5.就HotSpot Java虚拟机而言,JIT(Just In Time)编译器是该Java虚拟机的一部分,因此本书有时候并不严格区分Java虚拟机和JIT编译器。
6.本书涉及的命令如无特别说明均指Linux平台下的命令。
如何阅读本书
本书讲解过程中会涉及一些与多线程编程紧密相关的硬件知识,如果读者对这些知识不太熟悉,可以在阅读过程中参考或者直接先行阅读本书第11章前4节的内容。
读者也可以先阅读完本书前4章的内容,接着就开始集中实践。然后边实践边阅读本书的后续章节,或者在实践过程中遇到问题时再参考本书后续章节的内容。当然,这种阅读方法主要是便于读者尽快上手,并不是说本书后续章节的内容无足轻重。
学习一门新的技术、语言的一个行之有效的方法就是边学习边思考、带着问题在学习过程中寻找答案。因此,本书讲解过程中会穿插一些“扩展阅读”的内容,这些内容多涉及新手在学习多线程编程过程中经常会遇到的一些疑惑和问题。尽管如此,这并不能代替读者自己主动思考并从书中或者其他途径寻找答案。
本书介绍了Java标准库中与多线程编程紧密相关的一些类,但是这些内容并不能取代读者亲自阅读Java的API文档(http://docs.oracle.com/javase/8/docs/api/)。
配套源码下载
本书配套源码可以从下列网址下载:
https://github.com/Viscent/javamtia
或者,
http://www.broadview.com.cn/31065
与作者联系
读者在阅读本书过程中遇到问题或者有任何建议时,可以通过微信公众号VChannel与作者联系。
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),您即可享受以下服务。
下载资源:本书所提供的示例代码及资源文件均可在【下载资源】处下载。
提交勘误:您对书中内容的修改意见可在【提交勘误】处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
与作者交流:在页面下方【读者评论】处留下您的疑问或观点,与作者和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/31065
本书第49页有错误,如下图所示:
请问在哪里能看到勘误列表
建议推出PDF版的电子书
作者您好,下如何才能使用j**a -server 运行相关j**a文件,最好可以在idea上运行。
请问关于本书49页的清单2-7,为什么在new Thread()的时候传入的是新建的TimeConsumingTask对象,而不是之前创建好的对象呢?