展开全部

主编推荐语

本书涵盖Java整个并发程序体系的核心库和核心类,详解大量的设计思想,并与实际案例结合。

内容简介

本书涵盖Java并发编程体系的核心库和核心类的使用及原理分析,具体包括线程、synchronized、volatile、J.U.C中的重入锁和读写锁、并发中的条件等待机制、J.U.C并发工具集、深度探索并发编程不得不知的工具、阻塞队列、并发安全集合、线程池、异步编程特性等。

书中针对每一个技术点,纵向分析与其相关的所有内容,并且对相关知识点进行了非常详细的说明,同时从架构实践的角度来看待并发,通过大量实战案例让读者理解各类技术在实际应用中的使用方法。

作者花费了4年时间,投入了大量精力对并发编程领域进行了深入的研究,将自己13年的Java开发及架构经验融入了书中,对各位读者来说,这应该是一本非常值得阅读的图书。

目录

  • 版权信息
  • 内容简介
  • 前言
  • 读者服务
  • 第1章 Java线程的实践及原理揭秘
  • 1.1 如何理解系统并发
  • 1.2 系统如何支撑高并发
  • 1.3 线程的前世今生
  • 1.3.1 大白话理解进程和线程
  • 1.3.2 线程的核心价值
  • 1.3.3 如何理解并发和并行
  • 1.4 在Java中如何使用多线程
  • 1.4.1 实现Runnable接口创建线程
  • 1.4.2 继承Thread类创建线程
  • 1.4.3 实现Callable接口并创建带返回值的线程
  • 1.5 多线程如何应用到实际场景
  • 1.5.1 ServerSocket
  • 1.5.2 SocketThread
  • 1.6 多线程的基本原理
  • 1.7 线程的运行状态
  • 1.7.1 线程运行状态演示
  • 1.7.2 线程运行状态流转图
  • 1.8 如何正确终止线程
  • 1.8.1 关于安全中断线程的思考
  • 1.8.2 安全中断线程之interrupt
  • 1.8.3 如何中断处于阻塞状态下的线程
  • 1.8.4 interrupt()方法的实现原理
  • 1.9 理解上下文切换带来的性能影响
  • 1.9.1 上下文切换带来的问题
  • 1.9.2 什么是上下文切换
  • 1.9.3 如何减少上下文切换
  • 1.10 揭秘守护线程
  • 1.10.1 守护线程的应用场景
  • 1.10.2 守护线程使用注意事项
  • 1.11 快速定位并解决线程导致的生产问题
  • 1.11.1 死锁导致请求无法响应
  • 1.11.2 CPU占用率很高,响应很慢
  • 1.12 本章小结
  • 第2章 深度揭秘synchronized实现原理
  • 2.1 揭秘多线程环境下的原子性问题
  • 2.1.1 深入分析原子性问题的本质
  • 2.1.2 关于原子性问题的解决办法
  • 2.2 Java中的synchronized同步锁
  • 2.2.1 synchronized的使用方法
  • 2.2.2 了解synchronized同步锁的作用范围
  • 2.3 关于synchronized同步锁的思考
  • 2.4 synchronzied同步锁标记存储分析
  • 2.4.1 揭秘Mark Word的存储结构
  • 2.4.2 图解分析对象的实际存储
  • 2.4.3 通过ClassLayout查看对象内存布局
  • 2.4.4 Hotspot虚拟机中对象存储的源码
  • 2.5 synchronized的锁类型
  • 2.5.1 偏向锁的原理分析
  • 2.5.2 轻量级锁的原理分析
  • 2.5.3 重量级锁的原理分析
  • 2.6 关于CAS机制的实现原理分析
  • 2.6.1 CAS在AtomicInteger中的应用
  • 2.6.2 CAS实现自旋锁
  • 2.6.3 CAS在JVM中的实现原理分析
  • 2.7 锁升级的实现流程
  • 2.7.1 偏向锁的实现原理
  • 2.7.2 轻量级锁的实现原理
  • 2.7.3 重量级锁的实现原理
  • 2.8 synchronized使用不当带来的死锁问题
  • 2.8.1 死锁的案例分析
  • 2.8.2 死锁产生的必要条件
  • 2.8.3 如何解决死锁问题
  • 2.9 本章小结
  • 第3章 volatile为什么能解决可见性和有序性问题
  • 3.1 关于线程的可见性问题分析
  • 3.1.1 思考导致问题的原因
  • 3.1.2 volatile关键字解决可见性问题
  • 3.2 深度理解可见性问题的本质
  • 3.2.1 如何最大化提升CPU利用率
  • 3.2.2 详述CPU高速缓存
  • 3.2.3 CPU缓存一致性问题
  • 3.2.4 总结可见性问题的本质
  • 3.3 volatile如何解决可见性问题
  • 3.4 指令重排序导致的可见性问题
  • 3.4.1 什么是指令重排序
  • 3.4.2 as-if-serial语义
  • 3.5 从CPU层面深度剖析指令重排序的本质
  • 3.5.1 CPU优化——Store Buffers
  • 3.5.2 CPU优化——Store Forwarding
  • 3.5.3 CPU优化——Invalidate Queues
  • 3.6 通过内存屏障解决内存系统重排序问题
  • 3.6.1 内存屏障详解
  • 3.6.2 通过内存屏障防止重排序
  • 3.6.3 不同CPU的重排序规则
  • 3.6.4 总结CPU层面的可见性问题
  • 3.7 Java Memory Mode
  • 3.7.1 从JVM和硬件层面理解Java Memory Mode
  • 3.7.2 JVM提供的内存屏障指令
  • 3.8 揭秘volatile实现原理
  • 3.9 Happens-Before模型
  • 3.9.1 程序顺序规则
  • 3.9.2 传递性规则
  • 3.9.3 volatile变量规则
  • 3.9.4 监视器锁规则
  • 3.9.5 start规则
  • 3.9.6 join规则
  • 3.10 本章小结
  • 第4章 深入浅出分析J.U.C中的重入锁和读写锁
  • 4.1 J.U.C中与锁相关的API
  • 4.1.1 ReentrantLock的基本应用
  • 4.1.2 ReentrantReadWriteLock的基本应用
  • 4.1.3 StampedLock的基本应用
  • 4.2 ReentrantLock的设计猜想
  • 4.2.1 锁的互斥,必须要竞争同一个共享变量
  • 4.2.2 没有竞争到锁的线程,需要阻塞
  • 4.2.3 需要一个容器存储被阻塞的线程
  • 4.3 ReentrantLock实现原理分析
  • 4.4 AbstractQueuedSynchronizer
  • 4.5 ReentrantLock源码分析
  • 4.5.1 ReentrantLock.lock()方法
  • 4.5.2 AbstractQueuedSynchronizer.acquire()方法
  • 4.5.3 NonfairSync.tryAcquire()方法
  • 4.5.4 ReentrantLock.nofairTryAcquire()方法
  • 4.5.5 AbstractQueuedSynchronizer.addWaiter()方法
  • 4.5.6 AQS.acquireQueued()方法
  • 4.6 ReentrantLock释放锁源码分析
  • 4.6.1 ReentrantLock.tryRelease()方法
  • 4.6.2 unparkSuccessor()方法
  • 4.6.3 释放锁的线程继续执行
  • 4.7 分析ReentrantReadWriteLock类的原理
  • 4.7.1 WriteLock锁竞争原理
  • 4.7.2 ReadLock锁竞争原理
  • 4.7.3 ReentrantReadWriteLock中的锁降级
  • 4.8 StampedLock的原理分析
  • 4.8.1 核心内部类分析
  • 4.8.2 StampedLock原理图解
  • 4.8.3 StampedLock锁升级
  • 4.9 本章小结
  • 第5章 从线程通信来窥探并发中的条件等待机制
  • 5.1 wait/notify
  • 5.1.1 wait()/notify()方法使用实战
  • 5.1.2 图解生产者/消费者
  • 5.1.3 wait()/notify()方法的原理
  • 5.1.4 wait()/notify()方法为什么要加同步锁
  • 5.2 通过Thread.join获取线程执行结果
  • 5.2.1 Thread.join()方法的执行流程
  • 5.2.2 Thread.join()方法的实现原理
  • 5.3 J.U.C中的条件控制Condition
  • 5.3.1 Condition的基本应用
  • 5.3.2 基于Condition的手写阻塞队列
  • 5.4 Condition的设计猜想
  • 5.5 Condition的源码分析
  • 5.5.1 Condition.await()方法
  • 5.5.2 Condition.signal()方法
  • 5.5.3 锁竞争成功后的执行流程
  • 5.6 本章小结
  • 第6章 J.U.C并发工具集实战及原理分析
  • 6.1 CountDownLatch简单介绍
  • 6.1.1 CountDownLatch的基本使用
  • 6.1.2 CountDownLatch运行流程
  • 6.1.3 如何落地到实际应用
  • 6.1.4 CountDownLatch的其他用法
  • 6.2 CountDownLatch底层原理
  • 6.2.1 让线程等待的await()方法到底做了什么
  • 6.2.2 深入分析countDown()方法源码
  • 6.2.3 线程被唤醒后的执行逻辑
  • 6.3 Semaphore
  • 6.3.1 Semaphore使用案例
  • 6.3.2 Semaphore方法及场景说明
  • 6.4 Semaphore原理分析
  • 6.4.1 Semaphore令牌获取过程分析
  • 6.4.2 Semaphore令牌释放过程分析
  • 6.5 CyclicBarrier
  • 6.5.1 CyclicBarrier的基本使用
  • 6.5.2 基本原理分析
  • 6.6 CyclicBarrier实现原理及源码
  • 6.6.1 await()方法
  • 6.6.2 reset()方法
  • 6.7 本章小结
  • 第7章 深度探索并发编程不得不知的工具
  • 7.1 初步认识ThreadLocal
  • 7.2 ThreadLocal的应用场景分析
  • 7.3 ThreadLocal解决SimpleDateFormat线程安全问题
  • 7.3.1 SimpleDateFormat线程安全问题的原理
  • 7.3.2 ThreadLocal实现线程安全性
  • 7.4 ThreadLocal实现原理分析
  • 7.4.1 set()方法源码分析
  • 7.4.2 get()方法源码分析
  • 7.4.3 ThreadLocal内存泄漏
  • 7.5 任务拆分与聚合Fork/Join
  • 7.5.1 Fork/Join的核心API说明
  • 7.5.2 Fork/Join的基本使用
  • 7.6 Fork/Join的实现原理
  • 7.6.1 WorkQueue的原理
  • 7.6.2 工作窃取算法
  • 7.7 Fork/Join的核心源码分析
  • 7.7.1 任务提交过程详解
  • 7.7.2 唤醒或者创建工作线程
  • 7.7.3 工作线程和工作队列的绑定
  • 7.7.4 ForkJoinWorkerThread运行过程
  • 7.8 使用Fork/Join解决实际问题
  • 7.8.1 项目结构说明
  • 7.8.2 ILoadDataProcessor
  • 7.8.3 AbstractLoadDataProcessor
  • 7.8.4 业务服务类
  • 7.8.5 Item聚合任务服务
  • 7.8.6 ComplexTradeTaskService
  • 7.8.7 测试代码
  • 7.9 本章小结
  • 第8章 深度剖析阻塞队列的设计原理及实现
  • 8.1 什么是阻塞队列
  • 8.2 Java中提供的阻塞队列
  • 8.3 阻塞队列中提供的方法
  • 8.4 阻塞队列的使用
  • 8.4.1 生产者/消费者模型代码
  • 8.4.2 图解阻塞队列实现原理
  • 8.5 阻塞队列应用实战
  • 8.5.1 基于阻塞队列的责任链源码
  • 8.5.2 阻塞队列实战场景总结
  • 8.6 详解J.U.C中阻塞队列的使用
  • 8.6.1 基于数组结构的阻塞队列ArrayBlockingQueue
  • 8.6.2 基于链表的阻塞队列LinkedBlockingQueue
  • 8.6.3 优先级阻塞队列PriorityBlockingQueue
  • 8.6.4 延迟阻塞队列DelayQueue
  • 8.6.5 无存储结构的阻塞队列SynchronousQueue
  • 8.6.6 阻塞队列结合体LinkedTransferQueue
  • 8.6.7 双向阻塞队列LinkedBlockingDeque
  • 8.7 阻塞队列的实现原理
  • 8.7.1 put()方法说明
  • 8.7.2 take()方法说明
  • 8.8 本章小结
  • 第9章 深度解读并发安全集合的原理及源码
  • 9.1 并发安全集合ConcurrentHashMap
  • 9.2 正确理解ConcurrentHashMap的线程安全性
  • 9.2.1 computeIfAbsent()方法详解
  • 9.2.2 computeIfPresent()方法详解
  • 9.2.3 compute()方法详解
  • 9.2.4 merge()方法详解
  • 9.3 ConcurrentHashMap的数据结构
  • 9.3.1 ConcurrentHashMap数据存储相关定义
  • 9.3.2 Node数组初始化过程分析
  • 9.3.3 单节点到链表的转化过程分析
  • 9.3.4 扩容还是转化为红黑树
  • 9.4 深度分析ConcurrentHashMap中的并发扩容机制
  • 9.4.1 多线程并发扩容原理图解
  • 9.4.2 详解ConcurrentHashMap中的数据迁移
  • 9.5 分段锁设计提高统计元素数量的性能
  • 9.5.1 size计数的基本原理分析
  • 9.5.2 addCount()方法详解
  • 9.5.3 fullAddCount()方法分析
  • 9.6 详解红黑树的实现原理
  • 9.6.1 什么是红黑树
  • 9.6.2 红黑树的平衡规则
  • 9.6.3 红黑树的平衡场景规则说明
  • 9.6.4 红黑树插入元素平衡图解
  • 9.6.5 红黑树规则实战解析
  • 9.6.6 红黑树中删除元素的平衡规则
  • 9.7 ConcurrentHashMap中红黑树的使用
  • 9.7.1 TreeBin的基本介绍
  • 9.7.2 链表转化成红黑树
  • 9.7.3 自平衡
  • 9.7.4 ConcurrentHashMap总结
  • 9.8 Java中其他并发安全集合
  • 9.8.1 ConcurrentLinkedQueue
  • 9.8.2 ConcurrentLinkedDeque
  • 9.8.3 ConcurrentSkipListMap
  • 9.9 深度分析数据结构:跳表
  • 9.9.1 什么是跳表
  • 9.9.2 跳表的特性
  • 9.9.3 跳表的基本操作
  • 9.10 本章小结
  • 第10章 站在架构的角度思考线程池的设计及原理
  • 10.1 线程池的优势
  • 10.2 Java中提供的线程池
  • 10.2.1 线程池的使用
  • 10.2.2 ThreadPoolExecutor
  • 10.3 Executor框架详解
  • 10.4 线程池的设计猜想
  • 10.4.1 线程池的需求分析
  • 10.4.2 生产者/消费者模型的设计
  • 10.4.3 任务拒绝策略
  • 10.4.4 非核心线程的回收
  • 10.4.5 线程池设计总结
  • 10.5 从实现原理了解线程池
  • 10.6 线程池核心源码剖析
  • 10.6.1 线程状态和数量存储
  • 10.6.2 线程池的状态机及变更
  • 10.6.3 从execute()方法分析线程池源码
  • 10.7 合理设置线程池参数
  • 10.7.1 线程池大小的合理设置
  • 10.7.2 动态设置线程池参数
  • 10.8 线程池的监控
  • 10.8.1 线程池监控的基本原理
  • 10.8.2 在Spring Boot应用中发布线程池信息
  • 10.9 本章小结
  • 第11章 Java并发编程中的异步编程特性
  • 11.1 了解Future/Callable
  • 11.2 Future/Callable的实现原理
  • 11.2.1 FutureTask的核心属性
  • 11.2.2 FutureTask.run()
  • 11.2.3 FutureTask.get()
  • 11.2.4 finishCompletion()
  • 11.3 Java 8新特性之CompletableFuture
  • 11.3.1 CompletableFuture类关系图
  • 11.3.2 CompletableFuture方法说明
  • 11.3.3 主动获取执行结果
  • 11.4 CompletionStage方法及作用说明
  • 11.4.1 方法分类概述
  • 11.4.2 CompletionStage异常处理方法
  • 11.4.3 方法类型总结
  • 11.5 CompletableFuture综合实战
  • 11.5.1 商品实体对象
  • 11.5.2 模拟微服务请求实现类
  • 11.5.3 Web请求
  • 11.6 CompletableFuture实现原理分析
  • 11.6.1 Completion说明
  • 11.6.2 图解Completion的栈结构
  • 11.7 核心源码分析
  • 11.7.1 CompletableFuture静态任务创建
  • 11.7.2 Completion Stack构建
  • 11.7.3 简述UniCompletion
  • 11.7.4 任务执行流程
  • 11.7.5 获取任务执行结果
  • 11.8 本章小结
展开全部

评分及书评

评分不足
2个评分
  • 用户头像
    给这本书评了
    5.0

    示例很详细,值得一读

      转发
      评论

    出版方

    电子工业出版社

    电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。