# java-concurrency-in-practice-note **Repository Path**: niekailong/java-concurrency-in-practice-note ## Basic Information - **Project Name**: java-concurrency-in-practice-note - **Description**: Java 并发编程实战笔记 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-08-25 - **Last Updated**: 2022-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 并发编程实战 ## 第一部分 基础知识 ### 第 2 章 线程安全性 #### 什么是线程安全性 #### 原子性 ##### 竞态条件 ##### 示例:延迟初始化中的竞态条件 ##### 符合操作 #### 加锁机制 ##### 内置锁 ##### 重入 #### 用锁来保护状态 #### 活跃性与性能 ### 第3章 对象的共享 #### 可见性 ##### 失效数据 ##### 非原子的64位操作 ##### 加锁与可见性 ##### Volatile变量 #### 发布与逸出 #### 线程封闭 ##### Ad-hoc线程封闭 ##### 栈封闭 ##### ThreadLocal类 #### 不变性 ##### Final域 ##### 示例:使用Volatile类型来发布不可变对象 #### 安全发布 ##### 不正确的发布:正确的对象被破坏 ##### 不可变对象与初始化安全性 ##### 安全发布的常用模式 ##### 事实不可变对象 ##### 可变对象 ##### 安全地共享对象 ### 第4章 对象的组合 #### 设计线程安全地类 ##### 收集同步需求 ##### 依赖状态的操作 ##### 状态的所有权 #### 实例封闭 ##### java监视器模式 ##### 示例:车辆追踪 #### 线程安全性的委托 ##### 示例:基于委托的车辆追踪器 ##### 独立的状态变量 ##### 当委托失效时 ##### 发布底层的状态变量 ##### 示例:发布状态的车辆追踪器 #### 在现有的线程安全类中添加功能 ##### 客户端加锁机制 ##### 组合 ##### 将同步策略文档化 ### 第5章 基础构建模块 #### 同步容器类 ##### 同步容器类的问题 ##### 迭代器与Concurrent-ModificationException ##### 隐藏迭代器 #### 并发容器 ##### ConcurrentHashMap ##### 额外的原子map操作 ##### CopyOnWriteArrayList #### 阻塞队列和生产者-消费者模式 ##### 示例:桌面搜索 ##### 串行线程封闭 ##### 双端队列与工作密取 #### 阻塞方法与中断方法 #### 同步工具类 ##### 闭锁 ##### FutureTask ##### 信号量 ##### 栅栏 #### 构建高效且可伸缩的结果缓存 ## 第二部分 机构化并发应用程序 ### 第6章 任务执行 #### 在线程中执行任务 ##### 串行地执行任务 ##### 显示地为任务创建线程 ##### 无限制创建线程的不足 #### Executor框架 ##### 示例:基于Executor的web服务器 ##### 执行策略 ##### 线程池 ##### Executor的生命周期 ##### 延迟任务与周期任务 #### 找出可利用的并行性 ##### 示例:串行的页面渲染器 ##### 携带结果的任务Callable与Future ##### 示例:使用Future实现页面渲染器 ##### 在异构任务并行化中存在的局限 ##### CompletionService:Executor与BlockingQueue ##### 示例:使用CompletionService实现页面渲染器 ##### 为任务设置时限 ##### 示例:旅行预订门户网站 ## 第三部分 活跃性、性能与测试 ### 第10章 避免活跃性危险 #### 死锁 ##### 锁顺序死锁 ##### 动态的锁顺序死锁 ##### 在协作对象之间发生的死锁 ##### 开放调用 ##### 资源死锁 #### 死锁的避免与诊断 ##### 支持定时的锁 ##### 通过线程转储信息来分析死锁 #### 其它活跃性危险 ##### 饥饿 ##### 糟糕的响应性 ##### 活锁 ## 第四部分 高级主题 ### 第13章 显示锁 #### Lock与ReentrantLock ##### 轮询锁与定时锁 ##### 可中断的锁获取操作 ##### 非结构的加锁 #### 性能考虑因素 #### 公平性 #### 在synchronized和ReentrantLock之间进行选择 #### 读-写锁 ### 第14章 构建自定义的同步工具 #### 状态依赖性的管理 ##### 示例:将前提条件的失败传递给调用者 ##### 示例:通过轮询与休眠来实现简单的阻塞 ##### 条件队列 #### 使用条件队列 ##### 条件谓词 ##### 过早唤醒 ##### 丢失的信号 ##### 通知 ##### 示例:阀门类 ##### 子类的安全问题 ##### 封装条件队列 ##### 入口协议与出口协议 #### 显示地Condition对象 #### Synchronizer剖析 #### AbstractQueuedSynchronizer #### java.util.concurrent同步器类中的AQS ##### ReentrantLock ##### Semaphore与CountDownLatch ##### FutureTask ##### ReentrantReadWriteLock ### 第15章 原子变量与非阻塞同步机制 #### 锁的劣势 #### 硬件对并发的支持 ##### 比较并交换 ##### 非阻塞的计数器 ##### JVM对CAS的支持 #### 原子变量类 ##### 原子变量是一种“更好的volatile” ##### 性能比较:锁与原子变量 #### 非阻塞算法 ##### 非阻塞的栈 ##### 非阻塞的链表 ##### 原子的域更新器 ##### ABA问题 ### 第16章 #### 什么是内存模型,为什么需要它 ##### 平台的内存模型 ##### 重排序 ##### Java内存模型简介 ##### 借助同步 #### 发布 ##### 不安全的发布 ##### 安全的发布 ##### 安全初始化模式 ##### 双重检查加锁 #### 初始化过程中的安全性