展开全部

主编推荐语

本书深入浅出介绍Java并行程序设计,涵盖基础、实战、锁优化、设计模式、高并发框架Akka及调试方法。

内容简介

本书主要介绍基于Java的并行程序设计基础、思路、方法和实战。首先,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法。其次,进一步详细介绍了JDK中对并行程序的强大支持,帮助读者可以快速、稳健地进行并行程序开发。再次,详细讨论了有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍了并行的基本设计模式以及Java 8、9、10对并行程序的支持和改进。第五,介绍了高并发框架Akka的使用方法。第六,详细介绍了并行程序的调试方法。最后分析Jetty代码并给出一些其在高并发优化方面的举例。

目录

  • 封面
  • 书名页
  • 内容简介
  • 版权页
  • 前言
  • 目录
  • 第1章 走入并行世界
  • 1.1 何去何从的并行计算
  • 1.1.1 忘掉那该死的并行
  • 1.1.2 可怕的现实:摩尔定律的失效
  • 1.1.3 柳暗花明:不断地前进
  • 1.1.4 光明或是黑暗
  • 1.2 你必须知道的几个概念
  • 1.2.1 同步(Synchronous)和异步(Asynchronous)
  • 1.2.2 并发(Concurrency)和并行(Parallelism)
  • 1.2.3 临界区
  • 1.2.4 阻塞(Blocking)和非阻塞(Non-Blocking)
  • 1.2.5 死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)
  • 1.3 并发级别
  • 1.3.1 阻塞
  • 1.3.2 无饥饿(Starvation-Free)
  • 1.3.3 无障碍(Obstruction-Free)
  • 1.3.4 无锁(Lock-Free)
  • 1.3.5 无等待(Wait-Free)
  • 1.4 有关并行的两个重要定律
  • 1.4.1 Amdahl定律
  • 1.4.2 Gustafson定律
  • 1.4.3 是否相互矛盾
  • 1.5 回到Java:JMM
  • 1.5.1 原子性(Atomicity)
  • 1.5.2 可见性(Visibility)
  • 1.5.3 有序性(Ordering)
  • 1.5.4 哪些指令不能重排:Happen-Before规则
  • 第2章 Java并行程序基础
  • 2.1 有关线程你必须知道的事
  • 2.2 初始线程:线程的基本操作
  • 2.2.1 新建线程
  • 2.2.2 终止线程
  • 2.2.3 线程中断
  • 2.2.4 等待(wait)和通知(notify)
  • 2.2.5 挂起(suspend)和继续执行(resume)线程
  • 2.2.6 等待线程结束(join)和谦让(yeild)
  • 2.3 volatile与Java内存模型(JMM)
  • 2.4 分门别类的管理:线程组
  • 2.5 驻守后台:守护线程(Daemon)
  • 2.6 先做重要的事:线程优先级
  • 2.7 线程安全的概念与关键字synchronized
  • 2.8 程序中的幽灵:隐蔽的错误
  • 2.8.1 无提示的错误案例
  • 2.8.2 并发下的ArrayList
  • 2.8.3 并发下诡异的HashMap
  • 2.8.4 初学者常见的问题:错误的加锁
  • 第3章 JDK并发包
  • 3.1 多线程的团队协作:同步控制
  • 3.1.1 关键字synchronized的功能扩展:重入锁
  • 3.1.2 重入锁的好搭档:Condition
  • 3.1.3 允许多个线程同时访问:信号量(Semaphore)
  • 3.1.4 ReadWriteLock读写锁
  • 3.1.5 倒计数器:CountDownLatch
  • 3.1.6 循环栅栏:CyclicBarrier
  • 3.1.7 线程阻塞工具类:LockSupport
  • 3.1.8  Guava和RateLimiter限流
  • 3.2 线程复用:线程池
  • 3.2.1 什么是线程池
  • 3.2.2 不要重复发明轮子:JDK对线程池的支持
  • 3.2.3 刨根究底:核心线程池的内部实现
  • 3.2.4 超负载了怎么办:拒绝策略
  • 3.2.5 自定义线程创建:ThreadFactory
  • 3.2.6 我的应用我做主:扩展线程池
  • 3.2.7 合理的选择:优化线程池线程数量
  • 3.2.8 堆栈去哪里了:在线程池中寻找堆栈
  • 3.2.9 分而治之:Fork/Join框架
  • 3.2.10 Guava中对线程池的扩展
  • 3.3 不要重复发明轮子:JDK的并发容器
  • 3.3.1 超好用的工具类:并发集合简介
  • 3.3.2 线程安全的HashMap
  • 3.3.3 有关List的线程安全
  • 3.3.4 高效读写的队列:深度剖析ConcurrentLinkedQueue类
  • 3.3.5 高效读取:不变模式下的CopyOnWriteArrayList类
  • 3.3.6 数据共享通道:BlockingQueue
  • 3.3.7 随机数据结构:跳表(SkipList)
  • 3.4 使用JMH进行性能测试
  • 3.4.1 什么是JMH
  • 3.4.2 Hello JMH
  • 3.4.3 JMH的基本概念和配置
  • 3.4.4 理解JMH中的Mode
  • 3.4.5 理解JMH中的State
  • 3.4.6 有关性能的一些思考
  • 3.4.7 CopyOnWriteArrayList类与ConcurrentLinkedQueue类
  • 第4章 锁的优化及注意事项
  • 4.1 有助于提高锁性能的几点建议
  • 4.1.1 减少锁持有时间
  • 4.1.2 减小锁粒度
  • 4.1.3 用读写分离锁来替换独占锁
  • 4.1.4 锁分离
  • 4.1.5 锁粗化
  • 4.2 Java虚拟机对锁优化所做的努力
  • 4.2.1 锁偏向
  • 4.2.2 轻量级锁
  • 4.2.3 自旋锁
  • 4.2.4 锁消除
  • 4.3 人手一支笔:ThreadLocal
  • 4.3.1 ThreadLocal的简单使用
  • 4.3.2 ThreadLocal的实现原理
  • 4.3.3 对性能有何帮助
  • 4.4 无锁
  • 4.4.1 与众不同的并发策略:比较交换
  • 4.4.2 无锁的线程安全整数:AtomicInteger
  • 4.4.3 Java中的指针:Unsafe类
  • 4.4.4 无锁的对象引用:AtomicReference
  • 4.4.5 带有时间戳的对象引用:AtomicStampedReference
  • 4.4.6 数组也能无锁:AtomicIntegerArray
  • 4.4.7 让普通变量也享受原子操作:AtomicIntegerFieldUpdater
  • 4.4.8 挑战无锁算法:无锁的Vector实现
  • 4.4.9 让线程之间互相帮助:细看SynchronousQueue的实现
  • 4.5 有关死锁的问题
  • 第5章 并行模式与算法
  • 5.1 探讨单例模式
  • 5.2 不变模式
  • 5.3 生产者-消费者模式
  • 5.4 高性能的生产者-消费者模式:无锁的实现
  • 5.4.1 无锁的缓存框架:Disruptor
  • 5.4.2 用Disruptor框架实现生产者-消费者模式的案例
  • 5.4.3 提高消费者的响应时间:选择合适的策略
  • 5.4.4 CPU Cache的优化:解决伪共享问题
  • 5.5 Future模式
  • 5.5.1 Future模式的主要角色
  • 5.5.2 Future模式的简单实现
  • 5.5.3 JDK中的Future模式
  • 5.5.4 Guava对Future模式的支持
  • 5.6 并行流水线
  • 5.7 并行搜索
  • 5.8 并行排序
  • 5.8.1 分离数据相关性:奇偶交换排序
  • 5.8.2 改进的插入排序:希尔排序
  • 5.9 并行算法:矩阵乘法
  • 5.10 准备好了再通知我:网络NIO
  • 5.10.1 基于Socket的服务端多线程模式
  • 5.10.2 使用NIO进行网络编程
  • 5.10.3 使用NIO来实现客户端
  • 5.11 读完了再通知我:AIO
  • 5.11.1 AIO EchoServer的实现
  • 5.11.2 AIO Echo客户端的实现
  • 第6章 Java 8/9/10与并发
  • 6.1 Java 8的函数式编程简介
  • 6.1.1 函数作为一等公民
  • 6.1.2 无副作用
  • 6.1.3 声明式的(Declarative)
  • 6.1.4 不变的对象
  • 6.1.5 易于并行
  • 6.1.6 更少的代码
  • 6.2 函数式编程基础
  • 6.2.1 FunctionalInterface注释
  • 6.2.2 接口默认方法
  • 6.2.3 lambda表达式
  • 6.2.4 方法引用
  • 6.3 一步一步走入函数式编程
  • 6.4 并行流与并行排序
  • 6.4.1 使用并行流过滤数据
  • 6.4.2 从集合得到并行流
  • 6.4.3 并行排序
  • 6.5 增强的Future:CompletableFuture
  • 6.5.1 完成了就通知我
  • 6.5.2 异步执行任务
  • 6.5.3 流式调用
  • 6.5.4 CompletableFuture中的异常处理
  • 6.5.5 组合多个CompletableFuture
  • 6.5.6 支持timeout的 CompletableFuture
  • 6.6 读写锁的改进:StampedLock
  • 6.6.1 StampedLock使用示例
  • 6.6.2 StampedLock的小陷阱
  • 6.6.3 有关StampedLock的实现思想
  • 6.7 原子类的增强
  • 6.7.1 更快的原子类:LongAdder
  • 6.7.2 LongAdder功能的增强版:LongAccumulator
  • 6.8 ConcurrentHashMap的增强
  • 6.8.1 foreach操作
  • 6.8.2 reduce操作
  • 6.8.3 条件插入
  • 6.8.4 search操作
  • 6.8.5 其他新方法
  • 6.9 发布和订阅模式
  • 6.9.1  简单的发布订阅例子
  • 6.9.2  数据处理链
  • 第7章 使用Akka构建高并发程序
  • 7.1 新并发模型:Actor
  • 7.2 Akka之Hello World
  • 7.3 有关消息投递的一些说明
  • 7.4 Actor的生命周期
  • 7.5 监督策略
  • 7.6 选择Actor
  • 7.7 消息收件箱(Inbox)
  • 7.8 消息路由
  • 7.9 Actor的内置状态转换
  • 7.10 询问模式:Actor中的Future
  • 7.11 多个Actor同时修改数据:Agent
  • 7.12 像数据库一样操作内存数据:软件事务内存
  • 7.13 一个有趣的例子:并发粒子群的实现
  • 7.13.1 什么是粒子群算法
  • 7.13.2 粒子群算法的计算过程
  • 7.13.3 粒子群算法能做什么
  • 7.13.4 使用Akka实现粒子群
  • 第8章 并行程序调试
  • 8.1 准备实验样本
  • 8.2 正式起航
  • 8.3 挂起整个虚拟机
  • 8.4 调试进入ArrayList内部
  • 第9章 多线程优化示例—Jetty核心代码分析
  • 9.1 Jetty简介与架构
  • 9.2 Jetty服务器初始化
  • 9.2.1 初始化线程池
  • 9.2.2 初始化ScheduledExecutorScheduler
  • 9.2.3 初始化ByteBufferPool
  • 9.2.4 维护ConnectionFactory
  • 9.2.5 计算ServerConnector的线程数量
  • 9.3 启动Jetty服务器
  • 9.3.1 设置启动状态
  • 9.3.2 注册ShutdownMonitor
  • 9.3.3 计算系统的线程数量
  • 9.3.4 启动QueuedThreadPool
  • 9.3.5 启动Connector
  • 9.4 处理HTTP请求
  • 9.4.1 Accept成功
  • 9.4.2 请求处理
  • 封底
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

电子工业出版社

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