前言:
Java近些年深受程序员们的喜爱,而线程是Java平台的基石。随着多核处理器成为标准,欲构建高性能的应用程序,有效地利用并发将成为关键的步骤。无论如何,开发、测试、调试多线程的程序仍然非常困难;常见的情形总是开发的并发程序看上去可以正常工作,但是在极端情况下就会失败,就生产环境而言这种情况是指高负载。
而今天分享的GitHub上标星81.6k的Java并发编程实践, 以坚实的理论基础和翔实的实践技术,可帮助朋友们构建可靠的、可伸缩的和可维护的并发应用程序。并不是简单地罗列出并发API和机制,相反,它提供了设计规则、模式和理想模型,使大家能够更容易地构建出既正确又高效的并发程序来。
为了不影响阅读,下面将这份文档的内容以图片的形式展现出来,但篇幅有限只能展示部分,如果你需要“高清完整的pdf版”,可以直接点此处获得完整笔记。
1.并发的(非常)简短历史
2.线程的优点
3. 线程的风险
4. 线程无处不在
1. 什么是线程安全性
2.原子性
3. 锁
4.用锁来保护状态
5. 活跃度与性能
1. 可见性
2.发布和****逸出
3. 线程封闭
4.安全发布
1. 设计线程安全的类
2.实例限制
3. 委托线程安全
4.向已有的线程安全类添加功能
5. 同步策略的文档化
1. 同步容器
2.并发容器
3. 阻塞队列和生产者-消费者模式
4. 阻塞和可中断的方法
5. Synchronizer
6.为计算结果建立高效、可伸缩的高速缓存
1. 在线程中执行任务
2. Executor框架
3. 寻找可强化的并行性
1.任务取消
2.停止基于线程的服务
3. 处理反常的线程终止
4. JVM关闭
1.任务与执行策略间的隐性耦合
2. 定制线程池的大小
3. 配置ThreadPoolExecutor
4. 扩展ThreadPoolExecutor
5.并行递归算法
1. 为什么GUI是单线程化的
2. 短期的GUI任务
3. 耗时GUI任务
4. 共享数据模型
5.其他形式的单线程子系统
1.死锁
2.避免和诊断死锁
3.其他的活跃度危险
1. 性能的思考
2. Amdahl定律
3. 线程引入的开销
4.减少锁的竞争
5. 示例:比较Map的性能
6.减少上下文切换的开销
1.测试正确性
2. 测试性能
3. 避免性能测试的陷阱
4.测试方法补遗
1. Lock和ReentrantLock
2. 对性能的考量
3. 公平性
4. 在synchronized和ReentrantLock之间进行选择
5. 读-写锁
1. 管理状态依赖性
2.使用条件队列
3. 显式的Condition对象
4.剖析Synchronizer
5.AbstractQueuedSynchronizer
6. java.util.concurrent的Synchronizer类中的AQS
1. 锁的劣势
2. 硬件对并发的支持
3.原子变量类
4. 非阻塞算法
1.什么是存储模型,要它何用
2. 发布
3. 初始化安全性
4.同步Annotation
以上资料已整理成完整的PDF文档,有需要此资料学习的朋友,可以直接点此处获取。