`

【新闻】本人新书《Java多线程编程实战指南(核心篇)》已出版上市

阅读更多

本人新书《Java多线程编程实战指南(核心篇)》现已出版上市。

出版社现在有赠书活动:http://blog.csdn.net/broadview2006/article/details/72396623

豆瓣主页

https://book.douban.com/subject/27034721/

购买链接

京东:https://item.jd.com/12184434.html

亚马逊: https://www.amazon.cn/dp/B071RV8NLW

互动出版网: http://product.china-pub.com/5661167

当当: http://product.dangdang.com/25069727.html

试读下载

(待补充)

源码下载

https://github.com/Viscent/javamtia

内容简介

随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了——如今就连智能手机这样的消费类设备都已配备了4核乃至8核的处理器,更何况商用系统!在此背景下,以往靠单个处理器自身处理能力的提升所带来的软件计算性能提升的那种“免费午餐”已不复存在,这使得多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。故而,掌握多线程编程技能对广大开发人员的重要性亦由此可见一斑。《Java多线程编程实战指南(核心篇)》以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。

《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。

目录

第一部分 多线程编程基础

第1章 走近Java世界中的线程 2

1.1 进程、线程与任务 2

1.2 多线程编程简介 4

1.2.1 什么是多线程编程 4

1.2.2 为什么使用多线程 4

1.3 Java线程API简介 5

1.3.1 线程的创建、启动与运行 5

1.3.2 Runnable接口 9

1.3.3 线程属性 12

1.3.4 Thread类的常用方法 14

1.3.5 Thread类的一些废弃方法 16

1.4 无处不在的线程 17

1.5 线程的层次关系 19

1.6 线程的生命周期状态 21

1.7 线程的监视 22

1.8 多线程编程简单运用实例 26

*1.9 多线程编程的优势和风险 27

1.10 本章小结 29

第2章 多线程编程的目标与挑战 31

2.1 串行、并发与并行 31

2.2 竞态 33

2.2.1 二维表分析法:解释竞态的结果 37

2.2.2 竞态的模式与竞态产生的条件 39

2.3 线程安全性 42

2.4 原子性 43

2.5 可见性 49

2.6 有序性 56

2.6.1 重排序的概念 56

2.6.2 指令重排序 57

2.6.3 存储子系统重排序 63

2.6.4 貌似串行语义 66

2.6.5 保证内存访问的顺序性 68

2.7 上下文切换 69

2.7.1 上下文切换及其产生原因 69

2.7.2 上下文切换的分类及具体诱因 70

2.7.3 上下文切换的开销和测量 71

2.8 线程的活性故障 73

2.9 资源争用与调度 74

2.10 本章小结 77

第3章 Java线程同步机制 80

3.1 线程同步机制简介 80

3.2 锁概述 81

3.2.1 锁的作用 82

3.2.2 与锁相关的几个概念 84

3.2.3 锁的开销及其可能导致的问题 86

3.3 内部锁:synchronized关键字 86

3.4 显式锁:Lock接口 89

3.4.1 显式锁的调度 91

3.4.2 显式锁与内部锁的比较 92

3.4.3 内部锁还是显式锁:锁的选用 95

*3.4.4 改进型锁:读写锁 95

3.5 锁的适用场景 99

3.6 线程同步机制的底层助手:内存屏障 99

*3.7 锁与重排序 102

3.8 轻量级同步机制:volatile关键字 105

3.8.1 volatile的作用 105

3.8.2 volatile变量的开销 111

3.8.3 volatile的典型应用场景与实战案例 111

3.9 实践:正确实现看似简单的单例模式 120

3.10 CAS与原子变量 126

3.10.1 CAS 127

3.10.2 原子操作工具:原子变量类 129

3.11 对象的发布与逸出 135

3.11.1 对象的初始化安全:重访final与static 137

3.11.2 安全发布与逸出 142

3.12 本章小结 143

第4章 牛刀小试:玩转线程 148

4.1 挖掘可并发点 148

4.2 新战场上的老武器:分而治之 148

4.3 基于数据的分割实现并发化 149

4.4 基于任务的分割实现并发化 158

4.4.1 按任务的资源消耗属性分割 159

4.4.2 实战案例的启发 169

4.4.3 按处理步骤分割 171

4.5 合理设置线程数 172

4.5.1 Amdahl’s定律 172

4.5.2 线程数设置的原则 173

4.6 本章小结 177

第5章 线程间协作 179

5.1 等待与通知:wait/notify 179

5.1.1 wait/notify的作用与用法 180

5.1.2 wait/notify的开销及问题 188

5.1.3 Object.notify()/notifyAll()的选用 191

*5.1.4 wait/notify与Thread.join() 191

5.2 Java条件变量 192

5.3 倒计时协调器:CountDownLatch 198

5.4 栅栏(CyclicBarrier) 203

5.5 生产者—消费者模式 210

5.5.1 阻塞队列 213

5.5.2 限购:流量控制与信号量(Semaphore) 216

*5.5.3 管道:线程间的直接输出与输入 218

5.5.4 一手交钱,一手交货:双缓冲与Exchanger 221

5.5.5 一个还是一批:产品的粒度 223

5.5.6 再探线程与任务之间的关系 224

5.6 对不起,打扰一下:线程中断机制 225

5.7 线程停止:看似简单,实则不然 228

5.7.1 生产者—消费者模式中的线程停止 233

5.7.2 实践:Web应用中的线程停止 233

5.8 本章小结 236

第6章 保障线程安全的设计技术 240

*6.1 Java运行时存储空间 240

6.2 大公无私:无状态对象 243

6.3 以“不变”应万变:不可变对象 248

6.4 我有我地盘:线程特有对象 254

6.4.1 线程特有对象可能导致的问题及其规避 258

6.4.2 线程特有对象的典型应用场景 264

6.5 装饰器模式 265

6.6 并发集合 267

6.7 本章小结 270

第7章 线程的活性故障 273

7.1 鹬蚌相争:死锁 273

7.1.1 死锁的检测 274

7.1.2 死锁产生的条件与规避 283

7.1.3 死锁的恢复 296

7.2 沉睡不醒的睡美人:锁死 301

7.2.1 信号丢失锁死 301

7.2.2 嵌套监视器锁死 301

7.3 巧妇难为无米之炊:线程饥饿 307

7.4 屡战屡败,屡败屡战:活锁 307

7.5 本章小结 308

第8章 线程管理 310

8.1 线程组 310

8.2 可靠性:线程的未捕获异常与监控 311

8.3 有组织有纪律:线程工厂 316

8.4 线程的暂挂与恢复 318

8.5 线程的高效利用:线程池 320

8.5.1 任务的处理结果、异常处理与取消 326

8.5.2 线程池监控 329

8.5.3 线程池死锁 330

8.5.4 工作者线程的异常终止 330

8.6 本章小结 331

第9章 Java异步编程 333

9.1 同步计算与异步计算 333

9.2 Java Executor框架 336

9.2.1 实用工具类Executors 337

9.2.2 异步任务的批量执行:CompletionService 339

9.3 异步计算助手:FutureTask 344

9.3.1 实践:实现XML文档的异步解析 345

9.3.2 可重复执行的异步任务 349

9.4 计划任务 352

9.5 本章小结 358

第10章 Java多线程程序的调试与测试 360

10.1 多线程程序的调试技巧 360

10.1.1 使用监视点 360

10.1.2 设置暂挂策略 361

10.2 多线程程序的测试 363

10.2.1 可测试性 364

10.2.2 静态检查工具:FindBugs 369

10.2.3 多线程程序的代码复审 370

10.2.4 多线程程序的单元测试:JCStress 372

10.3 本章小结 375

第二部分 多线程编程进阶

第11章 多线程编程的硬件基础与Java内存模型 378

11.1 填补处理器与内存之间的鸿沟:高速缓存 378

11.2 数据世界的交通规则:缓存一致性协议 382

11.3 硬件缓冲区:写缓冲器与无效化队列 386

11.3.1 存储转发 388

11.3.2 再探内存重排序 388

11.3.3 再探可见性 391

11.4 基本内存屏障 392

11.5 Java同步机制与内存屏障 395

11.5.1 volatile关键字的实现 395

11.5.2 synchronized关键字的实现 397

11.5.3 Java虚拟机对内存屏障使用的优化 398

11.5.4 final关键字的实现 398

11.6 Java内存模型 399

11.6.1 什么是Java内存模型 400

11.6.2 happen(s)-before关系 401

11.6.3 再探对象的安全发布 407

11.6.4 JSR 133 411

11.7 共享变量与性能 411

11.8 本章小结 411

第12章 Java多线程程序的性能调校 415

12.1 Java虚拟机对内部锁的优化 415

12.1.1 锁消除 415

12.1.2 锁粗化 417

12.1.3 偏向锁 419

12.1.4 适应性锁 420

12.2 优化对锁的使用 421

12.2.1 锁的开销与锁争用监视 421

12.2.2 使用可参数化锁 424

12.2.3 减小临界区的长度 428

12.2.4 减小锁的粒度 432

12.2.5 考虑锁的替代品 438

12.3 减少系统内耗:上下文切换 438

12.4 多线程编程的“三十六计”:多线程设计模式 440

12.5 性能的隐形杀手:伪共享 441

12.5.1 Java对象内存布局 442

12.5.2 伪共享的侦测与消除 445

12.6 本章小结 454

Web参考资源 457

参考文献 463

分享到:
评论

相关推荐

    《Java多线程编程实战指南(设计篇模式)》源码.zip

    《Java多线程编程实战指南(设计篇模式)》源码这是国内首部Java多线程设计模式原创作品《Java多线程编程实战指南(设计模式篇)》一书的源码。新书《Java多线程编程实战指南(设计模式篇)》,张龙老师作推荐序。书...

    基于Java的高性能系统设计源码解析与优化技巧:新书《高性能Java系统权威指南》2022年12月出版

    除了上述内容,书中还可能涵盖了Java虚拟机(JVM)的性能调优、垃圾回收机制、多线程编程、数据库连接池管理等高级话题。这些都是影响Java系统性能的关键因素,开发者在阅读本书时,能够了解到如何在实际工作中应对...

    java新书介绍-JDK

    4. **并发编程**:讲解了JDK中的并发工具类,如Executor框架、Fork/Join框架以及并发集合,让读者能够在多线程环境下写出高效、可靠的代码。 5. **错误与异常处理**:详细介绍Java的异常处理机制,如何正确使用try-...

    最新Java电子书.pdf

    首先,"JAVA参考大全.J2SE.5EDITION"提供了J2SE(Java 2 Standard Edition)5.0版本的详细指南,包括核心类库、异常处理、多线程、网络编程等内容。"Thinking in Java第三版 +第四版"是Bruce Eckel的经典著作,深入...

    根据测量模型和地图中六个地标的激光距离测量来定位双足机器人 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    西门子1500 PLC博途程序实例:大型汽车焊装自动生产线程序硬件结构详解 · PLC编程 说明

    内容概要:本文详细介绍了基于西门子1500PLC的汽车焊装生产线自动化控制系统的设计与实现。涵盖了硬件连接(如PLC、触摸屏、智能终端、机器人)、智能通信(Profinet、IO-Link、S7协议)以及高级算法的应用。具体包括设备命名规范、速度监测算法、机器人通信配置、GRAPH顺控程序、安全程序设计、MES系统通信等内容。文中还提供了具体的编程示例,展示了如何通过SCL、梯形图和STL等多种编程方式实现复杂的功能。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和自动化生产线有研究兴趣的人群。 使用场景及目标:适用于希望深入了解PLC编程、智能通信技术和自动化生产线集成的技术人员。目标是帮助读者掌握大型自动化项目的架构设计、编程技巧和故障排查方法。 其他说明:本文不仅提供理论知识,还包括大量实际操作经验分享,有助于提高读者的实际动手能力和解决问题的能力。

    第五章矿井通风网络中风量分配与调节.ppt

    第五章矿井通风网络中风量分配与调节.ppt

    第章--数据库基础知识-习题.doc

    第章--数据库基础知识-习题.doc

    2016 年全球生态足迹.zip

    背景描述 2016 年全球生态足迹 您所在国家消耗的资源是否超过一年产生的资源? 数据说明 上下文 生态足迹衡量的是特定人口生产其消耗的自然资源(包括植物性食品和纤维产品、牲畜和鱼产品、木材和其他林产品、城市基础设施的空间)和吸收其废物(尤其是碳排放)所需的生态资产。该足迹跟踪了六类生产性表面积的使用情况:农田、牧场、渔场、建成区(或城市)土地、森林面积和土地上的碳需求。 一个国家的生物承载力代表其生态资产的生产力,包括农田、牧场、林地、渔场和建筑用地。这些区域,尤其是如果不采伐,也可以吸收我们产生的大部分废物,尤其是我们的碳排放。 生态足迹和生物承载力都以全球公顷表示,即具有全球可比性的标准化公顷数与世界平均生产力。 如果一个种群的生态足迹超过该地区的生物承载力,则该区域就会出现生态赤字。它对其陆地和海洋所能提供的商品和服务的需求——水果和蔬菜、肉类、鱼类、木材、服装用棉花和二氧化碳吸收——超过了该地区生态系统可以更新的需求。生态赤字地区通过进口、变现自己的生态资产(如过度捕捞)和/或向大气中排放二氧化碳来满足需求。如果一个地区的生物承载力超过其生态足迹,它就拥有生态保护区。 确认 生态足迹测量是由不列颠哥伦比亚大学的 Mathis Wackernagel 和 William Rees 构思的。生态足迹数据由 Global Footprint Network 提供。 灵感 您的国家是否存在生态赤字,消耗的资源超过了每年的产量?哪些国家的生态赤字或保护区最大?他们的消费量是比普通国家少还是多?2017 年地球超载日,即日历上人类使用一年自然资源的日子,何时发生?

    LabVIEW与欧姆龙PLC的高效网络通讯解决方案:支持多类型数据读写及CIP协议

    内容概要:本文详细介绍了LabVIEW与欧姆龙PLC之间通过Ethernet/IP和TCP协议进行网络通讯的技术优势。文中强调了LabVIEW在自定义变量、字符串、数值(如I16、I32、Float、Double)、数组和BOOL类型数据读写方面的能力,指出其相比传统的Fins通讯更为优越。此外,文章展示了实际测试结果,证明了LabVIEW在这类通讯中的高准确度和稳定性。 适用人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要在项目中集成LabVIEW与欧姆龙PLC设备的人群。 使用场景及目标:适用于希望优化现有控制系统或新建设备间通讯链路的专业人士。主要目标是利用LabVIEW的强大功能来增强系统的可靠性和效率,减少因数据传输不畅带来的问题。 其他说明:文中提供的程序源码为原创作品,已经过充分测试并证实可行。对于想要深入了解两者交互机制或者寻求具体实施方法的人来说是非常有价值的参考资料。

    自动驾驶领域中SUMO与CARLA联合仿真的安装配置及强化学习应用

    内容概要:本文详细介绍了SUMO(Simulation of Urban MObility)和CARLA(Open Source Simulator for Autonomous Driving)这两个重要仿真工具的联合仿真环境的安装与配置步骤。首先,分别讲解了SUMO和CARLA的安装流程及其环境配置,然后重点阐述了两者联合仿真的具体配置方法。接着,文章探讨了如何利用这一联合仿真环境进行自动驾驶的开发和驾驶模拟,包括自定义车辆模型、交通场景和交通规则等。此外,还深入讨论了强化学习在自动驾驶中的应用,如通过定义奖励函数和动作空间来训练和优化自动驾驶系统,以及轨迹预测技术的应用。最后,文章介绍了轨迹规划的关键技术和其实现方法,强调了其在自动驾驶路径规划和导航中的重要作用。 适合人群:从事自动驾驶技术研发的研究人员、开发人员及相关专业的学生。 使用场景及目标:①帮助研究人员和开发者搭建SUMO与CARLA联合仿真环境;②利用该环境进行自动驾驶系统的开发、测试和优化;③探索强化学习和轨迹预测在自动驾驶中的应用;④掌握自动驾驶系统中的轨迹规划技术。 阅读建议:本文不仅提供了详细的安装配置指导,还涵盖了自动驾驶技术的核心原理和技术方法,因此读者应在实践中逐步理解和应用这些内容,特别是在实际项目中尝试搭建和使用联合仿真环境。

    应用密码学随堂测试.mhtml

    应用密码学随堂测试.mhtml

    短信系统网络结构及业务流程介绍.ppt

    短信系统网络结构及业务流程介绍.ppt

    电力系统分布式ADMM算法最优潮流调度与碳排放交易的MATLAB仿真研究

    内容概要:本文探讨了基于分布式ADMM(交替方向乘子法)算法与碳排放交易的电力系统最优潮流调度问题。文中详细介绍了如何利用MATLAB和CPLEX/GUROBI平台进行仿真,包括系统分区、目标函数定义、ADMM主循环以及边界处理等方面的内容。通过将传统发电成本与碳交易成本相结合,提出了一种新的优化模型,旨在实现低碳调度的目标。实验结果显示,相较于传统集中式调度方式,该方法不仅降低了碳交易成本,还显著减少了区域间通信数据量,提高了系统的隐私性和鲁棒性。 适合人群:从事电力系统优化调度研究的专业人士,尤其是关注低碳经济和智能电网发展的研究人员和技术人员。 使用场景及目标:适用于需要解决电力系统中碳排放问题的研究项目或工程应用。具体目标包括降低碳排放成本、提高调度效率、减少区域间通信数据量以及增强系统稳定性。 其他说明:文中提供了详细的MATLAB代码示例,有助于读者理解和复现相关研究成果。此外,还提到了一些实用技巧,如自适应调整惩罚系数rho、正确配置CPLEX求解器参数等,对于实际操作具有重要指导意义。

    数学算法基于C++的四平方和定理实现:整数分解为四个整数平方和的程序设计与优化

    内容概要:本文介绍了四平方和定理(拉格朗日定理)的编程实现方法及其优化思路。文章首先解释了四平方和定理的基本概念,即任意正整数可以表示为四个整数的平方和。接着,作者通过C++代码展示了如何将输入的整数逐步分解为四个平方数之和,具体步骤包括对输入整数进行开方取整并记录余数,然后对余数重复相同操作直到找到满足条件的四个平方数。此外,文中还提到为了提高运算效率,可以通过设置更严格的限制条件来减少不必要的计算,如使用数组保存每次运算结果,并根据特定规则更新数组中的值。最后,文章列举了一些具体的例子来验证算法的有效性,同时也指出了某些特殊情况需要额外处理,例如当余数为3时需额外增加两个1来满足六平方和的情况。 适合人群:具有C++编程基础的学习者或开发者,特别是对数学定理的编程实现感兴趣的读者。 使用场景及目标:①帮助读者理解四平方和定理的理论依据及其在编程中的应用;②指导读者如何通过编程实现数学定理,尤其是优化算法以提升计算效率。 其他说明:本文不仅提供了完整的C++代码示例,还详细解释了代码逻辑和优化策略,建议读者在阅读过程中结合实际编程练习,以便更好地掌握四平方和定理的编程实现方法。

    省计算机等级考试试题汇编.doc

    省计算机等级考试试题汇编.doc

    计算完美球体的雷达截面积Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    第二章电子商务基本模式.ppt

    第二章电子商务基本模式.ppt

Global site tag (gtag.js) - Google Analytics