1. requirement
    1. functionality
      1. acquire
      2. release
      3. nonblocking synchronization attempts(tryLock)
      4. timeout
      5. cancel
      6. exclusive state
      7. shared state
    2. performance
      1. scalability
        1. 不管多少线程,当通过同一个同步点时,开销应当是常量
  2. design
    1. atomically managing synchronization state
    2. blocking and unblocking threads
    3. maintaining queues
  3. implement
    1. synchronization state
      1. 32bit int
      2. compareAndSetState
    2. blocking
      1. LockSupport.park
      2. LockSupport.unpark
    3. queues
      1. lock queue
        1. CLH variant
          1. head
          2. predecessor
          3. sucessor
          4. tail
          5. node status
      2. condition queue
    4. fairness
      1. barging thread
      2. head node thread
  4. usage
    1. 作为内部类
  5. performance
    1. overhead
    2. throughput