java并发框架
线程池

第一章

1.1 上下文切换

  • 时间片
  • 切换开销

1.1.3 如何减少上下文切换

  • 无锁并发编程,将数据按照Hash算法分段取模,不同的线程处理不同的数据段
  • CAS算法
  • 使用最少的线程
  • 使用协程

1.2 死锁

避免死锁的常见方法:

  • 避免一个线程同时获取多个锁。

  • 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。

  • 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。

  • 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

1.3 资源限制的挑战

  • 什么是资源限制
  • 资源限制的挑战
  • 如何解决资源限制的问题
  • 在资源限制的情况下进行并发编程

1.4 总结

  • 多使用jdk提供的并发容器和工具类解决并发问题

第二章 java并发机制的底层实现原理

2.1 volatile的应用

volatile是轻量级的synchronized

2.2 synchronized的实现原理与应用

synchronized 重量级锁

2.2.2 锁的升级与对比

  1. 偏向锁
  2. 轻量级锁

2.3 原子(atomic)操作的实现原理

  1. 使用总线锁保证原子性
  2. 使用缓存锁保证原子性

2.4 java如何实现原子操作:

  1. 循环CAS

2.5 总结

java中的大部分容器和框架都依赖于volatile和原子操作的实现原理

第三章 java内存模型

  1. java内存模型的基础
  2. java内存模型的顺序一致性
  3. 同步原语
  4. java内存模型的设计

3.1 java内存模型的基础

3.1.1 并发编程模型的两个关键问题

  • 线程之间如何通信
  • 线程之间如何同步

3.1.2 java内存模型(JMM)的抽象结构