前言

随着计算机硬件的不断发展,CPU进入多核时代,并发运算因此也上升到了并行运算的高度,作为Java程序员,如何最大化地“压榨”CPU的资源,利用CPU超高的计算速度编写高效快速运行的程序,如何解决CPU与RAM之间速度不匹配的问题呢?

今天分享一份《Java高并发编程详解多线程与架构设计》就会帮你解决这些问题,本书结合作者的实践经验,不仅介绍了高速缓存Cache、Cache Line、Java内存模型,以及现代CPU基本架构等相关知识,还深入讲解了Java跨平台的高并发解决方案。

 

本书实战性强,从底层原理的角度总结和归纳各个技术细节,结合真实的案例详解高并发程序设计架构的技巧

内容简介

需要获取这份《Java高并发编程详解多线程与架构设计》402页文档的小伙伴可以直接转发+关注后扫描小编的二维码获取哦!

本书主要包含四个部分:

第①部分:主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础。

第②部分:引入了ClassLoader,这是因为ClassLoader与线程不无关系,我们可以通过synchronized关键字,或者Lock等显式锁的方式在代码的编写阶段对共享资源进行数据一致性保护,那么一个Class在完成初始化的整个过程到后在方法区(JDK8 以后在元数据空间)其数据结构是怎样确保数据一致性的呢?这就需要对ClassLoader有一个比较全面的认识和了解。

第③部分:详细、深入地介绍volatile关键字的语义,volatile关键字在Java中非常重要,可以说它奠定了Java核心并发包的高效运行,在这一部分中,我们通过实例展示了如何使用volatile关键字以及非常详细地介绍了Java内存模型等知识。

第④部分:站在程序架构设计的角度深入讲解了如何设计高效灵活的多线程应用程序,这一部分长达15个章节,其重要程度可见一斑。

第①部分:多线程基础(1~8章)

第1章 快速认识线程:本章主要介绍线程的概念,以及线程在Java中的主要作用,并且详细讲解了线程的生命周期,以及生命周期每个状态之间的切换方法。

 

第2章 深入理解Thread构造函数:本章主要介绍了所有与Thread有关的构造函数,线程的父子关系(并非继承关系,而是一种包含关系),Thread和ThreadGroup之间的关系,Thread 与虚拟机栈的关系(学习这部分内容需要读者有JVM的相关基础,尤其是对栈内存要有深入的理解),最后还介绍了守护线程的概念、特点和使用场景。

 

第3章 Thread API的详细介绍:本章主要分析了Thread的所有API,熟练掌握Thread的API是学好Thread的前提。

 

第4章 线程安全与数据同步:本章首先从一个简单的例子入手,讲解了数据同步的概念,以及会引发数据不一致性问题的情况,然后非常详细地介绍了synchronized关键字以及与其对应的JVM指令。本章的最后还分析了几种可能引起

 

第5章 线程间通信:我们在开发多线程程序的时候,往往不会只存在一个独立的线程,相反大多数情况下是需要多个线程之间进行协同工作的,如何在多个线程之间进行通信,是本章学习的重点。

 

第6章 ThreadGroup详细讲解:如果在创建线程时并未指定所属的Group,线程会默认和父线程加入同一个Group之中,ThreadGroup 为线程提供了一定的结构组织能力。

 

第7章 Hook线程以及捕获线程执行异常:本章将通过对UncaughtExceptionHandler的源码进行分析,使读者能够清晰地了解当Thread执行任务时出现异常应如何进行Handler的回调。本章的最后,我们还将学习如何向一个JVM进程注入Hook线程,当JVM进程收到中断信号时Hook线程将被触发执行。

 

第8章 线程池原理以及自定义线程池:首先从线程池的原理入手,详细讲解了一个功能完善的线程池应该具备哪些要素,其中包括任务队列、线程数量管理、拒绝策略、线程工厂等,后文中也会经常使用我们创建的线程池。

 

第②部分:Java Classloader(9~10章)

第9章 类的加载过程:本章将着重阐述类的加载过程,循序渐进地理解一个class文件是如何被JVM加载并且最后得以运行的。

 

第10章 JVM类加载器:本章将介绍JVM自带的三大类加载器根加载器、扩展类加载器、系统类加载器一不同的职责和各自的特点,然后重点讲解自定义类加载器、双亲委托机制,以及如何打破JDK的双亲委托模型。

 

第11章 线程上下文类加载器:本章将重点介绍和线程关系非常密切的上下文类加载器,以及通过JDBC驱动的源码剖析,让读者理解数据库驱动的加载过程。

 

第③部分:深入理解volatile关键字(12~14章)

第12章 volatile关键字的介绍:本章先通过一个简单的例子引入volatile关键字的使用场景,然后详细介绍Java的内存模型以及CPU Cache模型等,很好地掌握JMM以及CPU Cache等知识,对理解volatile关键字会有很大的帮助

 

第13章 深入volatile关键字:本章先从并发编程所要注意的三个主要特性:原子性、可见性、有序性入手,然后分析了在Java内存模型中应通过何种方式来保证这三个特性,最后深入分析了volatile 关键字的语义、原理和使用场景。

 

第14章 7种单例设计模式的设计:将本章内容安排到本书并且放到第三部分确实有些牵强,但是其中有一种单例的设计方法能够很好地说明volatile的使用场景,因此将其安排到本部分中,另外单例模式也许并不像你想象得那样简单,其中蕴含了很多对于类加载、高并发等细节的思考。

 

第④部分:多线程设计架构模式(15~29章)

需要获取这份《Java高并发编程详解多线程与架构设计》402页文档的小伙伴可以直接转发+关注后扫描小编的二维码即可免费获取哦!

第15章 监控任务的生命周期:我们通过将监听者模式与线程相结合很好地观察到了任务执行的周期,而且还能灵活方便地解决run方法无法获得线程运行后无返回值的问题。

 

第16章 Single Thread Execution设计模式:本章重点介绍了在多线程环境下对资源竞争的保护措施,通过机场安检的例子让读者掌握引起线程不安全问题的原因及其解决方法;当采用同步的方式对资源进行保护时,还需要注意同步的方式是否引起了锁的交叉使用,锁在交叉使用的情况下会导致出现死锁的情况,如何通过设计的方式进行避免,在本章中都进行了比较详细的讲解。

 

第17章 读写锁分离设计模式:本章“读写锁分离设计模式”中我们进行了读写锁的分离设计,旨在提高读场景明显多过写场景的程序效率。

 

第18章 不可变对象设计模式:本章“不可变对象设计模式”通过不可变Int类型的累加器的设计,可以让读者掌握如何才能设计一个线程安全的不可变对象。

 

第19章 Future设计模式:

 

第20章 Guarded Suspension设计模式:

 

第21章 线程上下文设计模式:

 

第22章 Balking设计模式:

 

第23章 Latch设计模式:

 

第24章 Thread-Per-Message设计模式:

 

第25章 Two Phase Termination设计模式:

 

第26章 Worker-Thread设计模式:

 

第27章 Active Objects设计模式:

 

第28章 Event Bus设计模式:

 

第29章 Event Driven设计模式:

 

主要内容特殊与目标读者

需要获取这份《Java高并发编程详解多线程与架构设计》402页文档的小伙伴可以直接转发+关注后扫描小编的二维码即可免费获取哦!