java并发编程实战

  1. 安全性问题。永远不发生糟糕的事情。
  2. 活跃性问题。某件正确的事情最终会发生。比如死锁,饥饿,活锁。
  3. 性能问题。在活跃性问题的基础上关注正确的事情尽快发生。例如服务时间过长,响应不灵敏,资源消耗过高等。

安全性问题

常用的注解:@ThreadSafe,@NotThreadSafe,@Immutable

  1. 原子性。避免竞态条件,以原子的方式执行,AtomicLong。
  2. 加锁机制
  3. 可见性
  4. 发布与逸出
  5. 线程封闭
  6. 栈封闭
  7. 不变性

活跃性问题

性能问题

AQS

AbstraceQueuedSynchronizer是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来。

它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。