线程安全问题

原子性(synchronized、lock)、可见性(volatile)、有序性(final)

锁的设计思想

  1. 互斥
    1. 标记锁的状态
  2. 队列,没有获取需要等待、阻塞、唤醒
    1. 锁的公平性和非公平性
    2. 锁的唤醒->线程对象之间的引用->链表
  3. 重入,保存某个线程的身份
    1. wait/notify(JVM)
    2. condition.await/signal(JUC)
    3. Locksupport.park/unpark(JDK Unsafe)
  4. 保存当前线程
    1. 全局对象存储
    2. 集合存储
    3. 数据库存储

image.png